在
xcode 6中,我为自定义视图创建了一个xib(命名为:ViewA,获得了RED背景颜色),ViewA的xib文件大小为600 * 600,在ViewA中,我放置了一个子视图labelB(获得了绿色背景色)在其中,labelB的numberOfLines = 0,所以labelB’高度是可变的,我希望ViewA的高度根据labelB的高度改变(例如ViewA.bottom = labelB.bottom 10),我已经将labelB的顶部,底部固定,尾随,导致ViewA,但它仍然没有!工作,ViewA的高度总是600,无论标签的高度是多少.如何在汽车布局中实现这一目标?谢谢
解决方法
使用自动布局,您需要执行以下操作:
>确保您没有为任何子视图添加固定宽度和/或高度约束(取决于您想要动态调整的尺寸).我们的想法是让每个子视图的内在内容大小决定子视图的高度. UILabels带有4个自动隐式约束,它们(小于所需优先级)尝试将标签的框架保持在适合所有文本所需的确切大小.
>确保每个标签的边缘严格连接(具有必需的优先级约束)到彼此的边缘及其超视图.你想确保如果你想象其中一个标签的大小增加,这将迫使其他标签为它腾出空间,最重要的是迫使superview扩展.
>仅向超级视图添加约束以设置其位置,而不是大小(至少不是您想要动态调整大小的维度).请记住,如果正确设置内部约束,其大小将由所有子视图的大小决定,因为它的边缘以某种方式连接到它们的边缘.
>确保在应用任何约束之前将视图的translatesAutoresizingMaskIntoConstraints属性值更改为NO.
而已.您不需要调用sizeToFit或systemLayoutSizeFittingSize:来使其工作,只需加载您的视图并设置文本即可.系统布局引擎将为您进行计算以解决您的约束. (如果有的话,你可能需要在superview上调用setNeedsLayout ……但这不应该是必需的.)
您可以查看原始答案here