UIScrollView と UIPageControl を含む UITableViewCells の 1 つを持つ UITableView があります。これにより、ユーザーはテーブルを閲覧しながら 2 つのページを水平方向にスクロールできます。
私の問題はこれです-最初はページコントロールが正常に機能し、スクロールビューでページを閲覧すると、小さなドットが期待どおりに移動するのがわかります。ただし、テーブルを上下にスクロールすると、ページ コントロールは常に最初のページにリセットされます。
これは、ページを決定するメソッドが 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 を上下にスクロールすると (ページ コントロールが 2 ページ目にある場合)、ログに次のように出力されます。
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 がゼロにリセットされるのはなぜですか?