iOS/Swift: 当UIStackView中的某个元素变大时,动态调整其大小

32

我在一个竖直的UIStackView中有两个元素:一个UILabel和一个UITableView。当在运行时动态添加一定数量的UITableViewCellUITableView中时,UIStackView的大小不会增加。

是否有一般的方法可以增加UIStackView的大小?

4个回答

29

您需要在栈视图的子视图上调用 sizeToFit()layoutIfNeeded()。像往常一样对UIStackView进行约束,并像往常一样对子视图进行约束。

另外,您需要将其设置为 proportionally fill(等比例填充),它将自适应新内容调整大小。


在实例化时调用它们还是每次更新 UITableView 时都调用它们? - jshapy8
尝试在 viewWillLayoutSubviews 中调用它们。 - Siriss
2
viewWillLayoutSubviews是UIViewController中的一个方法,所以我不理解答案:“您应该在stackView的子视图上在viewWillLayoutSubviews中调用sizeToFit()和layoutIfNeeded()。” - Gob
非常棒的答案。 我遇到了类似的问题已经两天了,这个建议救了我的命。 - Abhishek Khedekar
谢谢!对于那些想更好地理解分布和对齐的人,可以查看这篇文章:https://medium.com/better-programming/uistackview-distribution-vs-alignment-146b9612e24c - Andy Weinstein
如果我使用“spacing”属性或在元素之间使用约束来添加间距,则我的堆栈视图中的最后一个元素开始调整大小,忽略高度约束。 - Mando

16

确保在stackview上没有底部约束或高度约束。您只需要左侧、右侧和顶部约束。


1
一个带有或不带有约束的 UIStackView 似乎无法动态增加大小,除非您向其中添加另一个元素。 - jshapy8
我会调查一下。 - jshapy8
1
注意:如果有人在表格中为动态单元格添加从底部的stackview约束,请使用">="约束而不是"="。 - Abhishek Thapliyal
@AbhishekThapliyal >= 对我也不起作用。但是删除底部约束条件就可以了。 - Fengson
我尝试使用=,但将其优先级降低(如500),这样它开始更好地自动布局单元格。 - Mando

12

我在iOS 12上遇到了这个问题,而在iOS 13上却表现正常。只需进行如下设置:

stackView.distribution = .fillProportionally

修复了 :)


5

您只需要按比例填充,它将根据您的代码进行运作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接