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

时间:2013-01-12 12:58:10

标签: ios uiview uiviewcontroller xamarin.ios

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

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

View.Frame = _frame;

问题是此调用会自动首先触发ViewDidLoad()函数。 在ViewDidLoad()中,我将子视图放在“View.Frame”属性上。

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

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

1 个答案:

答案 0 :(得分:2)

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

如果它不是你在框架中传递的构造函数,你也可以在你的控制器中做这样的事情:

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

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