ios - 嵌入编程 UIView 的自动布局 XIB 未根据父级调整大小

标签 ios objective-c uiview autolayout

我有一个 xib 文件,代表一个带有自动布局的简单 View ,我正在用 [[NSBundle mainBundle] loadNibNamed:@"name"][0] 实例化它并添加到以编程方式创建的UIView 通过 addSubview:

问题是 View 没有拉伸(stretch)以满足它嵌入的 View 的大小;相反,它似乎默认为 xib 文件中指定的大小。 (我也找不到任何方法来在 xib 文件中对容器 View 本身设置约束,只有它的 subview 。)

同样有些奇怪的是,当我旋转 iPad 时, View 的宽度会按比例进一步缩小。所以它显然以某种方式连接起来,但初始值错误。

要让这个嵌入式 View 正确适应 View 层次结构,我缺少什么连接?

屏幕截图(为调试添加了洋红色):

screenshot 1

旋转成纵向后:

screenshot 2

最佳答案

它不调整自身大小以填充其新 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/

相关文章:

iphone - 关于 App 提交到 Apple iTunes 商店

ios - super View 旋转后获取 subview 位置

swift - 将 XIB 加载到另一个 XIB 的 View 中

ios - iOS 中的 Google Analytics SDK 3.0 _sqlite3 链接器错误

iphone - awakeFromNib 对面?

iphone - UIButton 选择器在嵌套 UIView 中不起作用

android - iOS 和 Android 上的 Firebase 邀请 - 是否可以在不显示 UI 的情况下生成共享链接?

ios - 在动画的 UIView 上获取点的颜色

ios - 如果为同一设备卸载/重新安装应用程序,设备 token 是否会更改

ios - 检查 iPhone 设备版本在设备上失败