iOS Monotouch - 如何在 ViewDidLoad() 之前设置 Frame?

标签 ios uiview uiviewcontroller xamarin.ios

是否可以在 UIViewController 中的 ViewDidLoad() 之前设置 Frame?

目前,我在构造函数中执行此操作:

View.Frame = _frame;

问题是这个调用首先自动触发 ViewDidLoad() 函数。 在 ViewDidLoad() 中,我将 subview 放置在“View.Frame”属性上。

但该属性仅在 ViewDidLoad() 完成后才会更改。 所以基本上“View.Frame = _frame;”首先使用旧的“Frame”值触发“ViewDidLoad()”,然后才更改属性。

我可以通过首先将一个类变量分配给“_frame”并在“ViewDidLoad()”中使用它来解决这个问题,但我想看看是否还有其他解决方案以及我是否在这里遗漏了一些东西。 (我也错过了这个流程背后的想法)

最佳答案

这是 iOS 上的常见情况,我想说你为你的构造函数做了正确的事情。调用 View 属性上的 getter 将加载 View ,因此它们提供了 IsViewLoaded 属性来检查这一点。

如果您传递框架的不是构造函数,您也可以在 Controller 中执行类似的操作:

public void SetFrame(Frame frame)
{
    if (IsViewLoaded) {
        View.Frame = frame;
    else {
        _frame = frame;
    }
}

由于这种情况,可能值得考虑您的设计。我不知道完整的情况,但是你的 Controller 可以在类中决定它的 Frame 吗?也许您可以传递另一个值,让您在 ViewDidLoad 中对 Frame 进行数学计算,这会更好地匹配 Apple 的模式。

关于iOS Monotouch - 如何在 ViewDidLoad() 之前设置 Frame?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14293548/

相关文章:

ios - 比较 UIViewController 实例

android - HockeyApp 崩溃分析 - App Store 和 Play Store

ios - 使用多色更改 UIView 的背景颜色

ios - 斯威特4。初始 ViewController 一瞬间错误,然后修复

iphone - 如何获取当前激活的 UITextField/UITextView 和 resignFirstResponder?

ios - 一个 View 的 subview 隐藏在另一个 View 后面的动画

ios - 尝试在 <app.ViewController> 上呈现 <app.TabController> ,它已经在 swift 中呈现 <UIAlertController>

ios - XCODE/IOS - 如何使用独占扩展立即呈现 whatsapp (.wai, .waa, .wam)

ios - 将数据存储在 NSUserdefaults 或 coredata 中?

ios - FireBase 错误信号 SIGABRT