8

我的应用程序中有一个 UIPageControl,它看起来非常好,大约有 10 个页面(点),但是用户可以添加许多不同的视图,因此点的数量可能会变成 30 个。

发生这种情况时,点会从屏幕边缘消失,并且您无法始终看到当前选择的页面,这一切看起来都很糟糕。

有什么方法可以使页面控件多行,或者在当前可见页面从屏幕消失的那一刻向左或向右移动。

4

5 回答 5

3

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

于 2011-01-20T15:58:05.010 回答
3

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

于 2012-08-22T13:51:08.313 回答
2

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

@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

}
于 2017-09-18T09:12:24.043 回答
1

我将最大页数设置为 20(在 iPhone 5S/SE 纵向模式下最多可以容纳).. 如果我的页面超过 20,我将点保持在同一个位置,但使点红色的。我想人们会意识到这意味着什么,我的屏幕上也经常有一个数字页码,还有 First 和 Last 按钮,我觉得人们对看到初始页面上的点移动更感兴趣。 在此处输入图像描述

于 2019-07-01T12:31:47.560 回答
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)
    }
于 2018-12-13T10:46:46.743 回答