我有一个 xib 文件,代表一个带有自动布局的简单 View ,我正在用 [[NSBundle mainBundle] loadNibNamed:@"name"][0]
实例化它并添加到以编程方式创建的UIView
通过 addSubview:
。
问题是 View 没有拉伸(stretch)以满足它嵌入的 View 的大小;相反,它似乎默认为 xib 文件中指定的大小。 (我也找不到任何方法来在 xib 文件中对容器 View 本身设置约束,只有它的 subview 。)
同样有些奇怪的是,当我旋转 iPad 时, View 的宽度会按比例进一步缩小。所以它显然以某种方式连接起来,但初始值错误。
要让这个嵌入式 View 正确适应 View 层次结构,我缺少什么连接?
屏幕截图(为调试添加了洋红色):
旋转成纵向后:
最佳答案
它不调整自身大小以填充其新 super View 的原因是您没有安排它这样做。简而言之,您需要在代码中添加约束,以便在将一个 View 添加到另一个 View 后关联两个 View 。
最有可能的是,IB 将 View 设置为将其自动调整掩码转换为约束。当它设置为使用自动布局时,很难从 NIB 确定它的自动调整掩码是什么。
无论如何,当您将它添加到父 View 时,自动生成的约束将保持其当前框架。当 superview 调整大小时,他们根据自动调整掩码调整它的大小(可能允许宽度和高度变化但不是到 superview 边缘的距离)。
当您使用自动布局时,您应该执行以下操作:
或者在 NIB 中关闭
translatesAutoresizingMaskIntoConstraints
,或者在将其添加到 super View 的代码中关闭它。您采用哪种方法取决于您是否预计该 View 将作为管理其 subview 布局的框架 View 类的 subview 添加。如果可以,那么您应该在 NIB 中将其保持打开状态,让该类决定是否将其关闭。将 View 添加到其父 View 后,向父 View 添加约束以控制 View 的布局位置。
关于ios - 嵌入编程 UIView 的自动布局 XIB 未根据父级调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26226608/