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

在Xcode 6中,我创build了一个自定义视图的xib(命名为:ViewA,得到了一个红色的背景色),而ViewA的xib在一个ViewA中获得了600 * 600的文件大小,我把一个子视图labelB(得到了一个绿色的背景色)其中labelB的numberOfLines = 0,所以labelB'height是可变的,我想根据labelB的高度(例如ViewA.bottom = labelB.bottom + 10)改变ViewA的高度,而且我已经将labelB的顶部,底部,尾随,导致ViewA,但它仍然不工作,ViewA的高度始终是600,无论标签的高度是多less。 我如何在自动布局中实现这个目标? 谢谢

在这里输入图像说明

使用自动布局,这是你需要做的事情:

  1. 确保您没有为任何子视图添加固定的宽度和/或高度约束(取决于您要dynamicresize的维度)。 这个想法是让每个子视图的内在内容大小决定子视图的高度。 UILabel s带有4个自动隐式约束,它们将以小于所需优先级的方式尝试将标签的框架保持在所需的精确大小以适应所有文本。

  2. 确保每个标签的边缘都严格地连接到彼此的边缘和它们的超级视图。 你要确保如果你想象其中一个标签越来越大,这将迫使其他标签腾出空间,最重要的是强制超级视图扩展。

  3. 只给superview添加约束来设置它的位置,而不是size(至less,不是你想要dynamic调整的尺寸)。 请记住,如果你正确地设置了内部约束,它的大小将由所有子视图的大小决定,因为它的边以某种方式连接到它们的边。

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

而已。 你不需要调用sizeToFitsystemLayoutSizeFittingSize:为了得到这个工作,只需加载你的意见,并设置文本,应该是它。 系统布局引擎将为您解决您的约束做计算。 (如果有的话,你可能需要在setNeedsLayout上调用setNeedsLayout …但是这不是必需的。)

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