我有一个父视图,其高度必须由其子内容决定。
如果不以编程方式更改故事板,我怎么能在故事板中实现这一点。
答案 0 :(得分:9)
您可以使用AutoLayout完成此操作。
确保每个子视图都有约束来定义其大小和位置。然后,将父视图的垂直内容拥抱和压缩阻力优先级设置为必需。这将根据子视图的高度和位置定义父级的高度。
请注意,根据子视图的内容,您可能还希望更改其垂直内容拥抱和压缩阻力优先级。例如,numberOfLines
设置为0
的UILabel可以根据其内容自动增长,因此您希望它垂直拥抱其内容并抵制垂直压缩,以便调整父视图的大小
此图像显示父(白色)视图及其在检查器面板中设置的垂直拥抱和压缩阻力优先级。请注意,父视图的宽度,x位置和y位置设置了约束,但没有为其高度设置约束。它可以根据子视图的高度和位置推断出它的高度(见下图)。
此图显示每个子视图的约束。请注意,这些视图的垂直拥抱和压缩阻力优先级不更改。这些视图中的每一个都具有x位置和y位置的约束,但是您会注意到并非所有视图都具有宽度和高度的约束。标签和开关之类的视图能够根据其内容自动推断其大小限制。如果您没有在每个子视图上设置垂直位置限制,则AutoLayout不知道每个视图需要多少空间,因此它不知道父视图应该有多高。
答案 1 :(得分:1)
1-添加View容器并添加约束。不要设置高度或底部间距或设置它,但优先级较低(例如999)。
2-将项目/东西添加到View容器并添加约束。请务必添加所有需要约束,并在底部项目中添加底部间距。
这将定义容器视图的高度。
PD:忘掉Content Hugging/Compression and Priority。它们很方便但在这里没用。他们只是设置了一个更大或更小的阻力。