UIPageControl 显示不正确的页面

Posted

技术标签:

【中文标题】UIPageControl 显示不正确的页面【英文标题】:UIPageControl showing incorrect page 【发布时间】:2012-05-04 03:26:23 【问题描述】:

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

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

【问题讨论】:

pageControlIsChangingPage 返回 YES。 我不知道为什么这会导致 UIPageControl 突然像我们在第一页上一样显示。我错过了什么? 当你执行return;时函数退出。 是的,但我不确定为什么会导致这个结果。需要详细说明吗? 【参考方案1】:

我认为问题在于 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;


终于

【讨论】:

【参考方案2】:

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

if (pageControlIsChangingPage)
  return;

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

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

【讨论】:

是的,只要我不滚动表格视图,它就可以完美运行。不过不太确定如何告诉 uipagecontrol 忽略这些 好的,这里有点奇怪:如果我在一个没有 uitableview 的滚动视图上向上滚动,页面控件不会错误地切换到第 1 页。所以看起来uitableview 以某种方式受到干扰。 我在想也许是 tableview,因为它是一个 uiscrollview 子类并共享相同的委托,正在调用相同的方法,因此内容偏移量始终为 0? @SeanDanzeiser 将日志放入scrollViewDidEndDecelerating:,每次滚动tableview时检查是否执行。您也可以尝试将scrollViewDidEndDecelerating: 注释掉。 确实在执行。我认为 tableview 必须以某种方式干扰,但我不确定如何克服这个问题

以上是关于UIPageControl 显示不正确的页面的主要内容,如果未能解决你的问题,请参考以下文章

UIPageControl 当前页面指示器在显示新视图之前切换

UIPageControl(页面控件)不显示在 UIPageViewController

Swift UIPageControl 不显示点

UIPageControl + UIScrollView 没有正确计算页面

如何获取 UIPageControl 大小?

UIPageController 与 UIPageControl 结合使用?