如何dynamic增加滚动视图的高度?

我在一个滚动视图中放置了一个表视图和一个视图,如何根据表视图中的单元格数量和内容视图中的内容dynamic地改变滚动视图的高度

你需要设置你的ScrollView的比赛。 您可以通过适当的自动布局或以编程方式进行

CGRect contentRect = CGRectZero; for (UIView *view in self.scrollView.subviews) { contentRect = CGRectUnion(contentRect, view.frame); } self.scrollView.contentSize = contentRect.size; 

在Swift3中

 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 } 

在Swift4中

这里是一个更简洁的版本在迅速4.信用Swift4这个答案

  extension UIScrollView { func updateContentView() { contentSize.height = subviews.sorted(by: { $0.frame.maxY < $1.frame.maxY }).last?.frame.maxY ?? contentSize.height } } 

你可以在故事板中完成相同的操作。 有黑客来完成这一点。

  1. 添加约束来滚动视图顶部,左侧,右侧和高度为1000或更多根据要求。 您的滚动视图可能会超过您的视图控制器高度本身。

  2. 然后,你可以添加约束之间的滚动视图底部和最后一个子视图(在你的情况下视图包含TableView和PaymentView)底部为0或10。

你现在可以删除你的身高限制。

但在此之前,确保scrollview的所有子视图之间的consaints是适当的。

希望能帮助到你。 快乐编码!

你只需做2件事就可以做到这一点

  1. 在添加view和tableview的时候,通过在scroll view的所有面添加约束来满足scrollview的所有约束,这样scrollview可以计算出它的内容大小,但是要确保给tableview一个固定的高度(我们稍后会在加载远程数据时增加高度)

  2. 现在,当你从远程URL获取数据,然后在调用tableview reloadData之后,你必须在你的代码中实现这个方法

 func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() for constraint in tableView.constraints{ if constraint.firstAttribute == .height{ constraint.constant = tableView.contentSize.height break } } self.view.layoutIfNeeded() }