【发布时间】:2012-11-11 19:38:05
【问题描述】:
我正在使用 UIScrollView 来显示很多子视图。下面是创建滚动视图的代码:
ScrollView = [[UIScrollView alloc]initWithFrame:CGRectZero];
ScrollView.delegate = self;
ScrollView.showsHorizontalScrollIndicator = NO;
ScrollView.showsVerticalScrollIndicator = NO;
ScrollView.clipsToBounds = YES;
ScrollView.scrollEnabled = YES;
ScrollView.pagingEnabled = YES;
CGFloat widthOfScroll= (maxTotalColumnsVisibleAtAnyPoint * widthOfSubView );
ScrollView.frame = CGRectMake(0, 0, widthOfScroll, heightOfSubView);
CGSize contentSizeHeaderView = self.ScrollView.frame.size;
CGFloat contentSizeWidth = self.totalSubViews * self.widthOfSubView;
contentSizeHeaderView.width = contentSizeWidth;
[ScrollView setContentSize:contentSizeHeaderView];
向ScrollView添加控件的代码和scrollView的事件处理程序如下::
-(void)loadControlsInScroll{
UIView *tempSubView = nil;
CGFloat tempOriginX = 0;
@autoreleasepool {
for (int i = 0; i < self.totalSubViews; i++) {
tempSubView = [dataSource viewForScroll:i];
tempSubView.layer.borderColor = borderColor.CGColor;
tempSubView.layer.borderWidth = kBorderWidth;
tempSubView.frame = CGRectMake(tempOriginX, 0, widthOfSubView, heightOfSubView);
tempOriginX = tempOriginX + widthOfSubView;
[self.ScrollView addSubview:tempSubView];
}
}
}
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
///Event handler
}
我已在此滚动视图中启用分页。
让我们假设最大滚动视图可以在其框架中容纳 8 个子视图。
案例 1:
16 个子视图被添加到滚动视图中。现在显示两个页面。滚动到两个页面都正常工作。触摸两个页面中的子视图不会导致任何错误行为。
案例 2:
9 个子视图被添加到滚动视图中。现在它也被拖页了。第一页包含第 1-8 个子视图。第二页包含第 2-9 个子视图。 现在在第 1 页中触摸子视图可以正常工作。在Page 2中触摸调用UIScrollView的事件处理函数scrollViewDidScroll。
更多信息:
- 如果 PagingEnabled 设置为 NO,则不会发生这种情况。
为什么即使没有手动完成滚动,也会调用此 scrollViewDidScroll 事件?这个时候也调用了事件处理函数scrollViewWillBeginDragging?
更新 1:
真正的问题是,如果PagingEnabled为YES,那么是否设置了scrollview的delegate,情况2,scroll view会自动滚动到上一页。
【问题讨论】:
标签: ios uiscrollview uiscrollviewdelegate scroll-paging