如何动态增加滚动视图的高度?
动态增加滚动视图高度的原因是为了让滚动视图能够根据其内容自动调整大小,并且外部滚动视图可以滚动而不是内部的表格视图。要实现这一点,需要进行以下两个步骤:
1. 在将视图和表格视图添加到滚动视图中时,需要满足滚动视图的所有约束条件,通过将约束添加到滚动视图的所有边缘上,以便滚动视图可以计算出其内容大小,但要确保为表格视图设置固定高度(稍后在加载远程数据时会增加其高度)。
2. 当从远程URL获取数据后,在调用表格视图的reloadData方法之后,需要在代码中实现viewDidLayoutSubviews方法。这个方法会遍历表格视图的约束,找到高度约束,并将其值设置为表格视图的内容大小。然后调用self.view.layoutIfNeeded()方法来重新布局视图。
这样,表格视图的高度将根据其内容高度增加,滚动视图的内容大小也会增加,从而实现外部滚动视图的滚动。
可以尝试在获取远程数据的方法中调用这个方法,当表格视图完成重新加载内容时,可以使用dispatch_after或performSelectorAfterDelay来延迟执行这个方法。
如何动态增加滚动视图的高度?
问题原因:需要设置ScrollView的contensize。
解决方法:可以通过适当的自动布局或编程方式来实现。
在Objective-C中,可以使用以下代码:
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中,可以使用以下代码:
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。
3. 可以删除高度约束。
但在此之前,请确保滚动视图的所有子视图之间的约束是正确的。
希望对你有所帮助,祝你编码愉快!