Ios UIPageControl显示不正确的页面

Ios UIPageControl显示不正确的页面,ios,uiscrollview,uipagecontrol,Ios,Uiscrollview,Uipagecontrol,我有一个包含多个表的UIScrollView,还有一个UIPageControl跟踪用户当前查看的页面。在我开始在tableview上向上滚动之前,它工作正常,此时UIPageControl调整并(错误地)说我们在第一页 这是我的密码: - (void)scrollViewDidScroll:(UIScrollView *)_scrollView { if (pageControlIsChangingPage) { return; } /* * We switch

我有一个包含多个表的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;
}

不确定到底是什么导致了这一切。有什么想法吗?我被难住了:(

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

if (pageControlIsChangingPage)
  return;
当您不更改页面时(即,您改为滚动tableview),
return
似乎不会执行。如此类推

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

此时将执行部分,
\u scrollView.contentOffset.x
将小于
pageWidth/2
(甚至可以是
0
),当您只是上/下滚动时,
页面
结果是
1

我认为问题在于,UITableView和UIScrollView都调用了相同的scrollview方法,因为它们都将委托设置为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;

}

最后

pageControlIsChangingPage返回YES(是)。我不确定为什么会导致UIPageControl突然显示为我们在第一页上。我缺少什么?当您执行
return;
时,函数退出。是的,但我不确定为什么会导致此结果。是否要详细说明?是的,它可以完美地工作,只要执行
return;
因为我不滚动表格视图。我真的不知道如何告诉uipagecontrol忽略这些。然而OK这里有点奇怪:如果我在没有uitableview的scrollview上向上滚动,页面控件不会错误地切换到第1页。因此,似乎uitableview在某种程度上干扰了我。我想可能是吧ps由于tableview是一个uiscrollview子类,共享同一个委托,因此调用了相同的方法,因此内容偏移量始终为0?@seandaziser将日志放入
ScrollViewDiEndDeceling:
,检查是否每次滚动tableview时都执行它。您可以尝试注释掉
ScrollViewDiEndDecel正在运行:
也可以。它确实正在执行。我认为tableview一定是以某种方式干扰了,但我不确定如何克服这个问题