UIPageControl显示不正确的页面

时间:2012-05-04 03:26:23

标签: ios uiscrollview uipagecontrol

我有一个包含多个表的UIScrollView,以及一个UIPageControl,用于跟踪用户当前正在查看的页面。它工作正常UNTIL我开始在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;
}

不确定是什么导致这种情况发生。 。 。有任何想法吗?我很难过:(

2 个答案:

答案 0 :(得分:2)

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

if (_scrollView.tag == 100) {

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

}

终于

答案 1 :(得分:0)

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

if (pageControlIsChangingPage)
  return;

看来当你不改变页面时(即你改为滚动tableview),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),因为您只需向上/向下滚动,结果, page原来是1