我有一个自定义UIView
子类,其intrinsicContentSize
。视图在IB中声明,具有3个约束,center-x,height和bottom margin。当应用程序运行时,我希望视图占用的宽度等于固有宽度。
但是,在调试时,Interface Builder似乎为宽度添加了自己的运行时约束,它会覆盖内在宽度。我该如何防止这种情况?
答案 0 :(得分:2)
首先,请确保通过指定无高度来正确实施intrinsicContentSize
:
- (CGSize)intrinsicContentSize
{
return CGSizeMake(100.0f, UIViewNoIntrinsicMetric);
}
然后,如果你的视图的唯一约束是center-x,height和bottom-margin,那么IB应该提示一个模糊的布局,在文档大纲的右上角有一个小红色箭头(视图列表上的画布的左边。)
为了让IB满意,并防止它在构建应用程序时添加缺少的约束,您必须告诉它该视图具有自定义内在内容大小。要执行此操作,请选择视图,选择右侧的“大小检查器”面板,然后在最底部更改“内部大小”,“默认(系统定义)”"到"占位符"。
然后,您必须指明的尺寸与从intrinsicContentSize
返回的尺寸相同:
这告诉IB将在运行时定义内在内容大小,并且在设计时它应该使用这些值。
请注意,如果您在方法实现中指定了UIViewNoIntrinsicMetric
,则应检查"无"在IB。
此外,您在此处键入的值在运行时没有影响。这只是设计时IB的指标。