我可以使用下面的代码一直向下滚动:
- (void)viewDidLayoutSubviews {
dispatch_async (dispatch_get_main_queue(), ^ {
CGFloat scrollViewHeight = 0.0f;
for (UIView* view in self.scrollView.subviews) {
scrollViewHeight += view.frame.size.height;
}
[self.scrollView setContentSize:(CGSizeMake(320, scrollViewHeight))];
});
}
答案 0 :(得分:0)
编辑布局可能有两个问题。 (1)滚动视图(灰色)的单个子视图需要足够大以包含它的子视图,并且(2)如OP所暗示的那样,scrollView contentSize也必须。
UIView *grayView = // get a pointer to that grayView
CGFloat maxContentY = 0.0;
for (UIView* view in grayView.subviews) {
maxContentY = MAX(maxContentY, CGRectGetMaxY(view.frame));
}
grayView.frame = CGRectMake(0,0, 320,maxContentY);
如果这是scrollView的唯一子视图,那么contentSize很简单:
[self.scrollView setContentSize:grayView.frame.size];
如果还有其他子视图,在灰色旁边,那么我的原始答案包含也,将上的grayView大小调整为</ strong>并计算其他子视图的最大范围:
我们通常的目标是使contentSize.height
大到足以包含最底部子视图的底边。
这与OP视图中的子视图高度之和的计算方法不同。 (考虑偏移y == 1000和高度== 2的单个子视图。我们希望高度为1002,而不是2),所以......
- (void)viewDidLayoutSubviews {
dispatch_async (dispatch_get_main_queue(), ^ {
CGFloat maxY = 0.0f;
for (UIView* view in self.scrollView.subviews) {
maxY = MAX(maxY, CGRectGetMaxY(view.frame));
}
[self.scrollView setContentSize:(CGSizeMake(320, maxY))];
});
}
异步调用是无害的,但希望是不必要的。循环运行的时间很短,或者我们添加了太多的子视图。
答案 1 :(得分:0)
尝试这个
- (void)viewDidLayoutSubviews {
dispatch_async (dispatch_get_main_queue(), ^ {
CGRect contentRect = CGRectZero;
for (UIView *view in self.scrollView.subviews)
contentRect = CGRectUnion(contentRect, view.frame);
[self.scrollView setContentSize:contentRect.size];
});
}