是否可以在UIViewController中的ViewDidLoad()之前设置Frame?
目前,我在构造函数中执行此操作:
View.Frame = _frame;
问题是此调用会自动首先触发ViewDidLoad()函数。 在ViewDidLoad()中,我将子视图放在“View.Frame”属性上。
但是此属性仅在ViewDidLoad()完成后更改。 基本上“View.Frame = _frame;”首先使用旧的“Frame”值触发“ViewDidLoad()”,然后才更改属性。
我可以通过首先将类变量分配给“_frame”并在“ViewDidLoad()”中使用它来解决这个问题,但我想看看是否有其他解决方案,如果我在这里遗漏了一些东西。 (我也错过了这个流程背后的想法)
答案 0 :(得分:2)
这是iOS上的一种常见情况,我会说你正在为你的构造函数做正确的事情。在View
属性上调用getter将加载视图,因此它们提供了IsViewLoaded
属性来检查它。
如果它不是你在框架中传递的构造函数,你也可以在你的控制器中做这样的事情:
public void SetFrame(Frame frame)
{
if (IsViewLoaded) {
View.Frame = frame;
else {
_frame = frame;
}
}
由于这种情况,可能值得考虑您的设计。我不知道完整的情况,但你的控制器可以在课堂上决定它的Frame
吗?也许你可以传递另一个值,让你在Frame
中对ViewDidLoad
进行数学运算,这样可以更好地匹配Apple的模式。