如何根据子视图内容使视图高度增长

时间:2017-10-19 16:59:10

标签: ios autolayout uistoryboard nslayoutconstraint ios-autolayout

我有一个父视图,其高度必须由其子内容决定。

如果不以编程方式更改故事板,我怎么能在故事板中实现这一点。

2 个答案:

答案 0 :(得分:9)

您可以使用AutoLayout完成此操作。

确保每个子视图都有约束来定义其大小和位置。然后,将父视图的垂直内容拥抱和压缩阻力优先级设置为必需。这将根据子视图的高度和位置定义父级的高度。

请注意,根据子视图的内容,您可能还希望更改其垂直内容拥抱和压缩阻力优先级。例如,numberOfLines设置为0的UILabel可以根据其内容自动增长,因此您希望它垂直拥抱其内容并抵制垂直压缩,以便调整父视图的大小

此图像显示父(白色)视图及其在检查器面板中设置的垂直拥抱和压缩阻力优先级。请注意,父视图的宽度,x位置和y位置设置了约束,但没有为其高度设置约束。它可以根据子视图的高度和位置推断出它的高度(见下图)。

enter image description here

此图显示每个子视图的约束。请注意,这些视图的垂直拥抱和压缩阻力优先级更改。这些视图中的每一个都具有x位置和y位置的约束,但是您会注意到并非所有视图都具有宽度和高度的约束。标签和开关之类的视图能够根据其内容自动推断其大小限制。如果您没有在每个子视图上设置垂直位置限制,则AutoLayout不知道每个视图需要多少空间,因此它不知道父视图应该有多高。

enter image description here

答案 1 :(得分:1)

1-添加View容器并添加约束。不要设置高度或底部间距或设置它,但优先级较低(例如999)。

2-将项目/东西添加到View容器并添加约束。请务必添加所有需要约束,并在底部项目中添加底部间距。

这将定义容器视图的高度。

enter image description here

enter image description here

PD:忘掉Content Hugging/Compression and Priority。它们很方便但在这里没用。他们只是设置了一个更大或更小的阻力。