好的,所以我在界面生成器中创建了一个 UIView
。我正在使用 AutoLayout
并将此 View 的一个 subview 固定到所有四个边。
这是我不明白的地方。当我使用 loadNibNamed
加载此 NIB 文件时。然后我得到对 View 的引用。我为此 View 设置了框架。然而,当我访问 subview (使用 [containerView viewWithTag:1
])时,它的框架没有自动调整大小。是什么赋予了?如果更改父 View 的框架,为什么 subview 框架不也更改?
这没有任何意义。
为什么不能只加载一个 UIView
,设置它的框架并适当调整所有 subview (特别是因为我正在使用 AutoLayout
!)?
编辑:明确地说,我想做的就是能够在 IB 中使用适当的 AutoLayout
约束定义一个 UIView
层次结构,然后能够加载和显示屏幕上的 View 有时大小不同?为什么这么难?
最佳答案
当您更改 View 的几何形状时,UIKit 不会立即更新 subview 的几何形状。它会分批更新以提高效率。
运行事件处理程序后,UIKit 会检查是否需要对屏幕窗口层次结构中的任何 View 进行布局。如果找到任何内容,它会通过解决您的布局约束(如果有的话)然后发送 layoutSubviews
来布置它们。
如果您想解决约束并立即布置 View 的 subview ,只需将 layoutIfNeeded
发送到 View 即可:
someView.frame = CGRectMake(0, 0, 200, 300);
[someView layoutIfNeeded];
// The frames of someView.subviews are now up-to-date.
关于ios - 从 NIB 加载 UIView - 帧大小错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18909167/