如何根据XIB中的子视图大小调整超视图的高度?

xim*_*iao 6 xcode interface-builder ios autolayout

在Xcode 6,我创建一个自定义视图中的厦门国际银行(命名为:ViewA,有一个红色的背景颜色),以及ViewA的厦门国际银行有一个文件大小600*600,在ViewA,我把一个子视图labelB(有一个绿色的背景颜色)在它和labelB的numberOfLines = 0,所以labelB'height是可变的,我希望ViewA的高度发生变化,按labelB的高度(例如ViewA.bottom = labelB.bottom + 10),并且我已经钉住labelB的顶部,底部,尾随,导致ViewA,但它仍然没有!工作,ViewA的高度总是600,无论标签的高度是多少.如何在汽车布局中实现这一目标?谢谢

在此输入图像描述

Anu*_*put 6

使用自动布局,您需要执行以下操作:

  1. 确保您没有为任何子视图添加固定宽度和/或高度约束(取决于您想要动态调整的尺寸).我们的想法是让每个子视图的内在内容大小决定子视图的高度.UILabels带有4个自动隐式约束,它们(小于所需优先级)尝试将标签的框架保持在适合所有文本所需的确切大小.

  2. 确保每个标签的边缘严格连接(具有必需的优先级约束)到彼此的边缘及其超视图.你想确保如果你想象其中一个标签的大小增加,这将迫使其他标签为它腾出空间,最重要的是迫使superview扩展.

  3. 仅向超级视图添加约束以设置其位置,而不是大小(至少不是您希望它动态调整大小的尺寸).请记住,如果正确设置内部约束,其大小将由所有子视图的大小决定,因为它的边缘以某种方式连接到它们的边缘.

  4. 在应用任何约束之前,请确保更改为查看translatesAutoresizingMaskIntoConstraints属性值NO.

而已.您不需要调用sizeToFitsystemLayoutSizeFittingSize:使其工作,只需加载您的视图并设置文本即可.系统布局引擎将为您进行计算以解决您的约束.(如果有的话,你可能需要调用setNeedsLayoutsuperview ......但这不是必需的.)

你可以在这里查看原始答案