我有一个 UITableView,其中一个 UITableViewCells 包含一个 UIScrollView 和一个 UIPageControl;这样用户可以在浏览表格时水平滚动两个页面。
我的问题是——最初页面控件工作正常,当我浏览滚动视图中的页面时,我可以看到小点按预期移动。但是,当我向上或向下滚动表格时,页面控件总是重置回第一页。
这是因为我确定页面的方法使用 scrollview.contentoffset.x 来确定我在哪个页面上,并且只要我开始向上或向下移动表格,contentoffset.x 总是返回 0。实际的滚动视图本身在物理上不会左右移动(内容停留在正确的页面上);所以我不确定为什么 contentoffset.x 总是重置为 0?
这是我在 cellForRowAtIndexPath 中的代码
UIScrollView* previewScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, cell.frame.size.width, tideRowHeight)];
[previewScrollView setContentSize:CGSizeMake(640, tideRowHeight)];
[previewScrollView setPagingEnabled:YES];
[previewScrollView setTag:0022];
[previewScrollView setShowsHorizontalScrollIndicator:NO];
[previewScrollView setDelegate:self];
[previewScrollView addSubview:todayTidesTime];
[previewScrollView addSubview:todayTidesHeight];
[previewScrollView addSubview:todayTidesHL];
[[cell contentView] addSubview:previewScrollView];
UIPageControl *tidesPageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, 130, cell.frame.size.width, 10)];
[tidesPageControl setNumberOfPages:2];
[tidesPageControl setCurrentPageIndicatorTintColor:[UIColor blackColor]];
[tidesPageControl setPageIndicatorTintColor:[UIColor grayColor]];
[[cell contentView] addSubview:tidesPageControl];
self.pageControl = tidesPageControl;
这是我的代码,它确定了我所在的当前页面:
(void)scrollViewDidScroll:(UIScrollView *)sender {
CGFloat pageWidth = sender.frame.size.width;
int page = floor((sender.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
NSLog(@"content offset x %f", sender.contentOffset.x);
NSLog(@"scroll view did scroll %d", page);
self.pageControl.currentPage = page;
}
当我向上或向下滚动 UITableView 时,日志输出以下内容(而页面控件位于第二页):
2013-10-17 21:47:36.238 Vic [61180:a0b] content offset x 319.500000
2013-10-17 21:47:36.238 Vic [61180:a0b] page we are on 1
2013-10-17 21:47:36.254 Vic [61180:a0b] content offset x 320.000000
2013-10-17 21:47:36.254 Vic [61180:a0b] page we are on 1
2013-10-17 21:47:40.173 Vic [61180:a0b] content offset x 0.000000 <------scroll up here!
2013-10-17 21:47:40.173 Vic [61180:a0b] page we are on 0 <------ my problem!
2013-10-17 21:47:40.189 Vic [61180:a0b] content offset x 0.000000
为什么 contentoffset.x 会重置为零?