如何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 } }
你可以在故事板中完成相同的操作。 有黑客来完成这一点。
-
添加约束来滚动视图顶部,左侧,右侧和高度为1000或更多根据要求。 您的滚动视图可能会超过您的视图控制器高度本身。
-
然后,你可以添加约束之间的滚动视图底部和最后一个子视图(在你的情况下视图包含TableView和PaymentView)底部为0或10。
你现在可以删除你的身高限制。
但在此之前,确保scrollview的所有子视图之间的consaints是适当的。
希望能帮助到你。 快乐编码!
你只需做2件事就可以做到这一点
-
在添加view和tableview的时候,通过在scroll view的所有面添加约束来满足scrollview的所有约束,这样scrollview可以计算出它的内容大小,但是要确保给tableview一个固定的高度(我们稍后会在加载远程数据时增加高度)
-
现在,当你从远程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() }