使用自动布局,您需要执行以下操作:
>确保您没有为任何子视图添加固定宽度和/或高度约束(取决于您想要动态调整的尺寸).我们的想法是让每个子视图的内在内容大小决定子视图的高度. UILabels带有4个自动隐式约束,它们(小于所需优先级)尝试将标签的框架保持在适合所有文本所需的确切大小.
>确保每个标签的边缘严格连接(具有必需的优先级约束)到彼此的边缘及其超视图.你想确保如果你想象其中一个标签的大小增加,这将迫使其他标签为它腾出空间,最重要的是迫使superview扩展.
>仅向超级视图添加约束以设置其位置,而不是大小(至少不是您想要动态调整大小的维度).请记住,如果正确设置内部约束,其大小将由所有子视图的大小决定,因为它的边缘以某种方式连接到它们的边缘.
>确保在应用任何约束之前将视图的translatesAutoresizingMaskIntoConstraints属性值更改为NO.
而已.您不需要调用sizeToFit或systemLayoutSizeFittingSize:来使其工作,只需加载您的视图并设置文本即可.系统布局引擎将为您进行计算以解决您的约束. (如果有的话,你可能需要在superview上调用setNeedsLayout ……但这不应该是必需的.)
您可以查看原始答案here