UIPageControl + UIScrollView 没有正确计算页面

Posted

技术标签:

【中文标题】UIPageControl + UIScrollView 没有正确计算页面【英文标题】:UIPageControl + UIScrollView not counting pages properly 【发布时间】:2014-09-03 01:48:21 【问题描述】:

我遇到了一个 UIPageControl 增加 currentPage 超过数组计数的问题 - 1。例如;如果数组中有 5 个项目,它实际上会绘制 5 个点,但它只会转到第 4 号。控件根据UIScrollView 的分页增加或减少,直到(我认为会是)给定数组中的最大项目数。任何帮助,将不胜感激。

这是scrollViewDidEndDecelerating的代码:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

CGFloat pageWidth = _meatSelectionCollection.frame.size.width;
self.pageControl.currentPage = _meatSelectionCollection.contentOffset.x / pageWidth;
NSLog(@"Current Page Test: %ld", (long)self.pageControl.currentPage);

我正在检测 UIScrollView 中确定当前页面的页面宽度,并且启用了滚动视图中的分页。但是,当前页面的 NSLog 在页面更改时会读取以下输出:

2014-09-02 21:41:28.359 Burger Grinder[73531:60b] Current Page Test: 0
2014-09-02 21:41:29.420 Burger Grinder[73531:60b] Current Page Test: 1
2014-09-02 21:41:30.120 Burger Grinder[73531:60b] Current Page Test: 2
2014-09-02 21:41:30.870 Burger Grinder[73531:60b] Current Page Test: 3
2014-09-02 21:41:31.708 Burger Grinder[73531:60b] Current Page Test: 4
2014-09-02 21:41:32.476 Burger Grinder[73531:60b] Current Page Test: 4

它不会超过 4。确定它的数组计数返回为 6。我知道显示 4self.page.currentPage 是计数 0, 1, 2, 3, 4 的结果(即 5 个元素),但计数是 6 .

对可能导致这种情况的任何想法?提前致谢。

编辑:在增量后显示内容偏移和页面宽度日志:

2014-09-02 22:03:52.472 Burger Grinder[73813:60b] Current Page Test: 1
2014-09-02 22:03:52.472 Burger Grinder[73813:60b] Content Offset.x Value: 244.000000
2014-09-02 22:03:52.473 Burger Grinder[73813:60b] PageWidth: 244.000000
2014-09-02 22:03:55.811 Burger Grinder[73813:60b] Current Page Test: 2
2014-09-02 22:03:55.811 Burger Grinder[73813:60b] Content Offset.x Value: 488.000000
2014-09-02 22:03:55.812 Burger Grinder[73813:60b] PageWidth: 244.000000

事实上,即使计数没有超过 4,Content Offset.x Value 也会增加。它会在***别页面正确地将值记录为 1213,但计数器不会增加。

【问题讨论】:

contentOffset.xpageWidth的日志呢? @trick14 已编辑以添加值。 你确定你的scrollView有六页吗? scorollView.contentSize.width 的值是多少? content.offset.x1213 处达到最大值,但scrollView.width 记录为1457。默认宽度为2441457 / 244 = 6 第1页的内容偏移x必须为0,page2-offset 244page3-732page4-976page5-12201213 来自哪里?如果内容偏移量为 1213,宽度为 244,1213 / 244 = 4.xxxx 表示页数为 4。 【参考方案1】:

原来currentPage 的计算存在问题。在下面重新工具:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

CGFloat pageWidth = _meatSelectionCollection.frame.size.width;
//    self.pageControl.currentPage = _meatSelectionCollection.contentOffset.x / pageWidth;

// This is where it needed to be calculated correctly rather then the line above it.

int page = floor((_meatSelectionCollection.contentOffset.x - pageWidth / 2) / pageWidth) + 1; 

self.pageControl.currentPage = page;


NSLog(@"Current Page Test: %ld", (long)self.pageControl.currentPage);
NSLog(@"Content Offset.x Value: %f", _meatSelectionCollection.contentOffset.x);
NSLog(@"PageWidth: %f", pageWidth);
NSLog(@"Scroll View: %f", scrollView.contentSize.width);

【讨论】:

以上是关于UIPageControl + UIScrollView 没有正确计算页面的主要内容,如果未能解决你的问题,请参考以下文章

选择垂直时 UIPageControl 不出现

为啥我的 UIpageControl 不显示?

检测 UIPageControl 页面变化

UIPageControl 点之间的空间较大

横向的 UIPageControl

无法更改 UIPageControl 中的 currentPage 属性