Interface Builder 运行时自动布局约束阻止视图占用固有大小,我该如何解决这个问题?
Posted
技术标签:
【中文标题】Interface Builder 运行时自动布局约束阻止视图占用固有大小,我该如何解决这个问题?【英文标题】:Interface Builder runtime autolayout constraints preventing view from occupying intrinsic size, how do I fix this? 【发布时间】:2014-09-23 15:08:57 【问题描述】:我有一个自定义的UIView
子类,它有一个intrinsicContentSize
。视图在 IB 中声明,具有 3 个约束,center-x、height 和 bottom margin。当应用程序运行时,我希望视图占用的宽度等于固有宽度。
但是,在调试时,Interface Builder 似乎为宽度添加了自己的运行时约束,从而覆盖了固有宽度。如何防止这种情况发生?
【问题讨论】:
【参考方案1】:首先,确保您正确实现了intrinsicContentSize
,不指定高度:
- (CGSize)intrinsicContentSize
return CGSizeMake(100.0f, UIViewNoIntrinsicMetric);
然后,如果您的视图的唯一约束是 center-x、height 和 bottom-margin,IB 应该在文档大纲的右上角(视图列表画布的左侧)。
为了让 IB 满意,并防止它在构建应用程序时添加缺少的约束,您必须告诉它视图具有自定义的内在内容大小。为此,请选择视图,选择右侧的 Size Inspector 面板,然后在最底部将 Intrinsic Size 从“默认(系统定义)”更改为“占位符”。
然后您必须指定与从intrinsicContentSize
返回的大小相同的大小:
这告诉 IB 将在运行时定义一个内在的内容大小,并且在设计时它应该使用这些值。
请注意,如果您在方法实现中指定了UIViewNoIntrinsicMetric
,则应在 IB 中选中“无”。
此外,您在此处键入的值对运行时没有影响。这只是设计时 IB 的一个指标。
【讨论】:
以上是关于Interface Builder 运行时自动布局约束阻止视图占用固有大小,我该如何解决这个问题?的主要内容,如果未能解决你的问题,请参考以下文章
Xcode Interface builder 中的 Nib 视图不应用自动布局约束
在 Interface Builder 中删除自动布局(约束)