3

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 がゼロにリセットされるのはなぜですか?

4

1 に答える 1