2

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

目前,我在构造函数中这样做:

View.Frame = _frame;

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

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

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

4

1 回答 1

2

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

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

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

由于这种情况,可能值得考虑您的设计。我不知道全部情况,但是您的控制器可以Frame在班级内决定吗?也许您可以传递另一个值 in 让您对Framein进行数学运算ViewDidLoad,这会更好地匹配 Apple 的模式。

于 2013-01-12T14:02:58.713 回答