我在滚动视图中放置了一个表格视图和一个视图,如何根据表格视图中的单元格数量以及内容视图中显示的内容动态更改滚动视图的高度
答案 0 :(得分:1)
您需要设置ScrollView的竞争对手。 您可以通过适当的自动布局或以编程方式执行此操作
CGRect contentRect = CGRectZero;
for (UIView *view in self.scrollView.subviews) {
contentRect = CGRectUnion(contentRect, view.frame);
}
self.scrollView.contentSize = contentRect.size;
在 Swift 3
中override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
var contentRect = CGRect.zero
for view: UIView in scrollView.subviews {
contentRect = contentRect.union(view.frame)
}
contentRect.size.height = contentRect.size.height + 20
scrollView.contentSize = contentRect.size
}
在 Swift 4
中以下是Swift 4中更简洁的版本。对Swift 4的评价为ans
extension UIScrollView {
func updateContentView() {
contentSize.height = subviews.sorted(by: { $0.frame.maxY < $1.frame.maxY }).last?.frame.maxY ?? contentSize.height
}
}
您可以在故事板中完成相同的操作。 有成就的黑客。
根据要求,将scrollview top,left,right和height的约束添加为1000或更多。您的滚动视图可能会超出您的视图控制器高度本身。
然后,您可以在Scroll View Bottom&amp;最后一个子视图(在您的案例中包含TableView和PaymentView的视图)底部为0或10。
3.您现在可以删除身高限制。
但在此之前确保scrollview的所有子视图之间的限制是正确的。
希望它有所帮助。快乐编码!!
答案 1 :(得分:0)
你只需做两件事就可以实现这个目标
通过向滚动视图的所有边添加约束来在其中添加视图和tableview时满足scrollview的所有约束,以便scrollview可以计算出其内容大小,但确保为tableview提供固定高度(我们稍后会增加加载远程数据时的高度)
现在当您从远程网址获取数据时,在调用tableview reloadData之后,您必须在代码中实现此方法
func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
for constraint in tableView.constraints{
if constraint.firstAttribute == .height{
constraint.constant = tableView.contentSize.height
break
}
}
self.view.layoutIfNeeded()
}
&#13;
然后你的tableview高度将根据其内容高度增加,你的scrollview内容大小也将增加,然后只有你的外部scrollview将滚动而不是tableview滚动