是否可以在 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/