我有一个包含多个表的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;
}
不确定是什么导致这种情况发生。 。 。有任何想法吗?我很难过:(
答案 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
。