Swift/iOS8: 为什么页面控制指标不显示?

Swift/iOS8: Why are Page Control indicators not showing?

我正在实现一个简单的图库视图控制器,应用程序在其中显示用户可以滚动浏览的小范围全屏图像。我正在使用我认为的 UIPageViewController,如果我实现了正确的数据源功能,它应该会自动显示页面控制指示器。但是我仍然看不到任何指标。

在我的主要GalleryViewController:

class GalleryViewController: UIViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {

var pageController: UIPageViewController?
var pageContent = NSArray()

override func viewDidLoad() {
super.viewDidLoad()
.... some code to load images into the pageContent array ....

pageController = UIPageViewController(transitionStyle:.Scroll, navigationOrientation:.Horizontal,options:nil) 
pageController?.delegate = self
pageController?.dataSource = self

... some more standard code to add the page controller to self.view etc.

var pageControl = UIPageControl.appearance()
pageControl.pageIndicatorTintColor = UIColor.lightGray()
pageControl.currentPageIndicatorTintColor = UIColor.whiteColor()
pageControl.backgroundColor = UIColor.blackColor()

pageController!.didMoveToParentViewController(self)
}

func viewControllerAtIndex(index:Int) -> ContentViewController? {
....
}

我已经实现了两个强制协议方法 viewControllerBeforeViewController 和 viewControllerAfterController 以及两个必需的分页方法 presentationCountForPagesViewController 和 presentationIndexForPageViewController。

我的 ContentViewController 有一个 UIImageView 填满了整个屏幕。然而,即使我将它的尺寸从屏幕底部缩小,我也看不到任何页面指示灯。 我在这里错过了什么吗?如果我没有提供足够的信息,请告诉我。我一直在尝试重写我 5 年前在 Objective-C 中编写的旧应用程序 - 完全在 Swift 中 iOS8 和 Xcode 等已经改变了很多,很混乱。 谢谢!

摘自 here :

In order to show UIPageControl, you need to implement two optional datasource methods. Just return the whole number of pages for presentationCountForPageViewController and the initially selected index for presentationIndexForPageViewController

func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int {
    return pageContent.count
}

func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int {
    return 0
}

为什么不使用 swift 3+ 版本的 Zell B. 的回答

    func presentationCount(for pageViewController: UIPageViewController) -> Int {
        return self.providerItemList?.providerItems?.count ?? 0
    }

    func presentationIndex(for pageViewController: UIPageViewController) -> Int {
        return 0
    }

即使您要更改 UIPageControl 的颜色,它也可能不会出现。如果 UIPageController 在 UITabBarController 内部,TabBar 将覆盖 UIPageControl。 找到它的最佳方法是使用选项 Debug->View Debugging->CaptureViewHierarchy。然后在左下方的筛选字段中键入 "pageControl"。如果您在导航器中单击它,它应该会在屏幕上找到它(查看屏幕截图)

你可以这样改变位置:

let controlHeight: CGFloat = 50
    let bottomSpace: CGFloat = 20
    let yPosition = view.frame.size.height - (controlHeight + bottomSpace)
    let fullScreenWidth = view.frame.size.width
    let frame = CGRect(x: 0, y: yPosition, width: fullScreenWidth, height: controlHeight)

    pageControl.frame = frame

我的错误是在 presentationCount() 委托方法的页面视图控制器中将计数值设置为大于实际内容页面。

尽管这些答案中有很多答案,但我只想明确说明,您需要将 UIPageViewController 设置为 'Scroll',然后这些方法才会被调用。

点是白色的,或者是半透明的白色。请确保背景不是白色,或更改圆点的颜色。