什么是处理具有如此多点的UIPageControl的最佳方式,它们并非全部适合屏幕

时间:2011-01-20 09:24:58

标签: iphone ios uipagecontrol

我的应用程序中有一个UIPageControl,大约10页(点)看起来非常精细,但是用户可以添加许多不同的视图,因此点数可以说是30。

当发生这种情况时,点刚刚从屏幕边缘消失,并且您无法始终看到当前所选页面,使其看起来很糟糕。

有没有办法让页面控制多行,或者在当前可见页面消失的情况下向左或向右移动。

5 个答案:

答案 0 :(得分:3)

我创建了一个使用包含UIWebView的UIScrollView的eBook应用程序。这本书有100多页,所以UIPageControl因为你指出的问题无法处理它。我最终创建了一个自定义的“滑块”类型视图,其行为类似于UIPageControl但可以处理大量页面。这就是你需要做的事情。 UIPage控件无法处理任意数量的页面......

答案 1 :(得分:3)

计算页数/点比并存储为浮点值。然后将当前点数计算为当前页面/ pagesPerDot。在看到点移动之前,您可能需要前进几页,但它具有很高的可扩展性并且运行良好。

答案 2 :(得分:2)

我必须在我的水平集合视图下实现UIPageControl,该视图有30个项目。所以我通过固定点数来减少点数并仅在这些点中滚动。请遵循以下代码:

@IBOutlet var pageControl: UIPageControl!
var collectionDataList = [String]
let dotsCount = 5

override func viewDidAppear(_ animated: Bool) {
    if collectionDataList.count < dotsCount {
        self.pageControl.numberOfPages = collectionDataList.count
    } else {
        self.pageControl.numberOfPages = dotsCount
    } 
}

func scrollViewDidScroll(_ scrollView: UIScrollView)
{
   let pageWidth = scrollView.frame.width
   self.currentPage = Int((scrollView.contentOffset.x + pageWidth / 2) / pageWidth)
   self.pageControl.currentPage = self.currentPage % dotsCount

}

答案 3 :(得分:1)

我的解决方案是设置最大点数,并在最后一个点之前显示点,直到用户到达结尾为止。如果当前页码大于最大点数,我们将在最后一页之前显示一个,直到用户到达末尾为止。

var maxDotCount = 8   //Global constant.

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
        let pageWidth = collectionView.frame.size.width
        let currentPage = collectionView.contentOffset.x / pageWidth
        let pageControlsNumberOfPages = pageControl.numberOfPages - 1
        let dataSourceCount = CGFloat(dataSourceArr.count - 1)
        let maxDotCountReduced = CGFloat(maxDotCount - 1)

        if (dataSourceCount > maxDotCountReduced) {
            if (currentPage >= maxDotCountReduced) {
                if (currentPage == dataSourceCount) {
                    pageControl.currentPage = pageControlsNumberOfPages
                } else {
                    pageControl.currentPage = pageControlsNumberOfPages - 1
                }
                return
            }
        }
        pageControl.currentPage = Int(currentPage)
    }

答案 4 :(得分:1)

我将最大页面数设置为20(在肖像模式下,iPhone 5S / SE最多可以容纳20页)。如果页面超过20页,则将点保留在同一位置,但是将点变成红色。我认为人们已经意识到了它的含义,我经常在屏幕上也有一个数字页码,还有“第一”和“最后一个”按钮,而且我觉得人们对看到初始页面上的点移动更加感兴趣。 enter image description here