“自动布局”下返回为零的UIView对象的大小

“自动布局”下返回为零的UIView对象的大小,uiview,ios6,storyboard,autolayout,Uiview,Ios6,Storyboard,Autolayout,我正在IOS6下使用autolayout重新编写一个应用程序,但在访问UIView子类的大小时遇到问题 @property (weak, nonatomic) IBOutlet MyView *myView1; 在 UIView的大小在情节提要中完全定义,但在运行代码时显示为零。这是自动布局的todo,还是子视图还没有定义?我在这里做错了什么吗?刚刚找到了一个可能的答案。运行方法 [self.view setNeedsLayout]; [self.view layoutIfNeeded];

我正在IOS6下使用autolayout重新编写一个应用程序,但在访问UIView子类的大小时遇到问题

@property (weak, nonatomic) IBOutlet MyView *myView1;


UIView的大小在情节提要中完全定义,但在运行代码时显示为零。这是自动布局的todo,还是子视图还没有定义?我在这里做错了什么吗?

刚刚找到了一个可能的答案。运行方法

[self.view setNeedsLayout];
[self.view layoutIfNeeded];

强制计算UIViews维度,导致预期值出现在日志中,UIView子类本身也知道这些值。

我刚刚打印了子视图的框架

它是
viewDidLoad
中的
0

它在
viewdilayoutsubviews
回调中有一个非零值

viewDidLoad
中,您应该只期望viewcontroller的
view
的值为非零。在
viewDidLoad
中,有时您会添加子视图和其他内容。因此,期望在为其设置约束的回调中计算帧是不正确的


基本上需要理解的是,首先绘制viewController,然后在它经历其生命周期事件时,它的子视图将被布局

我们可以在
[self.myView1 layoutifneed]
之后获得实际大小。
[self.view setNeedsLayout];
[self.view layoutIfNeeded];