1

我有一个 UIScrollView 包含几个表,以及一个 UIPageControl 跟踪用户当前正在查看的页面。它工作正常,直到我开始在 tableview 上向上滚动,此时 UIPageControl 调整并(错误地)说我们在第一页上。

这是我的代码:

- (void)scrollViewDidScroll:(UIScrollView *)_scrollView {
  if (pageControlIsChangingPage) {
    return;
  }

  /*
   *  We switch page at 50% across
   */
  CGFloat pageWidth = _scrollView.frame.size.width;
  int page = floor((_scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
  pageControl.currentPage = page;
}

然后也是:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)_scrollView {
  pageControlIsChangingPage = NO;
}

不知道究竟是什么导致这种情况发生。. . 有任何想法吗?我难住了:(

4

2 回答 2

2

我认为问题在于 UITableView 和 UIScrollView,因为它们都将委托设置为 self,所以它们都在调用相同的滚动视图方法。我在主滚动视图中添加了一个标签,然后在调整页面时通过对标签执行检查来解释它,就像这样

if (_scrollView.tag == 100) {

CGFloat pageWidth = _scrollView.frame.size.width;
int page = floor((_scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
pageControl.currentPage = page;

}

最后

于 2012-05-04T23:22:26.563 回答
0

当您滚动页面时,它是否正确滚动?

if (pageControlIsChangingPage)
  return;

似乎当您不更改页面时(即您滚动表格视图),return将不会执行。所以

CGFloat pageWidth = _scrollView.frame.size.width;
int page = floor((_scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
pageControl.currentPage = page;

部分将被执行,此时,_scrollView.contentOffset.x将小于pageWidth / 2(甚至可以0),因为您只需向上/向下滚动,结果page1.

于 2012-05-04T03:39:37.510 回答