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