我的应用程序中有一个UIPageControl,大约10页(点)看起来非常精细,但是用户可以添加许多不同的视图,因此点数可以说是30。
当发生这种情况时,点刚刚从屏幕边缘消失,并且您无法始终看到当前所选页面,使其看起来很糟糕。
有没有办法让页面控制多行,或者在当前可见页面消失的情况下向左或向右移动。
答案 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)