从NIB加载UIView - 错误的帧大小

Nei*_*ury 9 ios

好的,所以我创建了一个UIViewin interface builder.我正在使用AutoLayout,我有一个这个视图的子视图固定到所有四个方面.

这是我不明白的.当我使用加载此NIB文件时loadNibNamed.然后我得到了对视图的引用.我为这个视图设置了框架.然而,当我访问子视图(使用[ containerView viewWithTag:1])时,它的帧没有自动调整大小.是什么赋予了?如果更改父视图的帧,为什么子视图帧也不会更改?

它没有任何意义.

为什么你不能只加载一个UIView,设置它的框架并适当调整所有子视图(特别是因为我正在使用AutoLayout!)?

编辑:要清楚,我想要做的就是能够UIView在IB中使用适当的AutoLayout约束定义层次结构,然后能够在屏幕上加载和显示有时不同大小的视图吗?为什么这么难?

rob*_*off 13

更改视图的几何体时,UIKit不会立即更新子视图几何体.它批量更新以提高效率.

运行事件处理程序后,UIKit会检查是否需要布置屏幕窗口层次结构中的任何视图.如果它找到任何,它通过解决你的布局约束(如果你有的话)然后发送它来解决它们layoutSubviews.

如果要解决约束并立即布置视图的子视图,只需发送layoutIfNeeded到视图:

someView.frame = CGRectMake(0, 0, 200, 300);
[someView layoutIfNeeded];
// The frames of someView.subviews are now up-to-date.
Run Code Online (Sandbox Code Playgroud)