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

时间:2014-11-19 10:18:00

标签: ios xcode interface-builder autolayout

在xcode 6中,我为自定义视图创建了一个xib(名为:ViewA,获得了RED背景色),ViewA的xib文件大小为600 * 600,在ViewA中,我放了一个子视图标签B(得到了一个绿色)其中,labelB的numberOfLines = 0,因此labelB'高度是可变的,我希望ViewA的高度根据labelB的高度而改变(例如ViewA.bottom = labelB.bottom + 10),我已经把它固定了labelB的顶部,底部,尾部,通向ViewA,但它仍然没有!工作,ViewA的高度总是600,无论标签的高度是多少。如何在汽车布局中实现这一目标?感谢

enter image description here

1 个答案:

答案 0 :(得分:6)

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

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

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

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

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

  5. 那就是它。您无需致电sizeToFitsystemLayoutSizeFittingSize:即可使其正常工作,只需加载您的观点并设置文字即可。系统布局引擎将为您进行计算以解决您的约束。 (如果有的话,您可能需要在超级视图上调用setNeedsLayout ...但不应该这样做。)

    您可以查看原始答案here