页面视图控制器不显示点

Page View Controller does not show dots

我创建了一个滚动的 pageviewcontroller,但我无法显示 dots/bar。据我了解,只要 Navigation 设置为 Horizo​​ntal 且 Transition style 设置为 Scroll,这应该默认存在,但没有任何显示。

然后我添加了一些额外的代码来添加和设置点的样式,但仍然没有。这是我现在的代码:

import UIKit

class Swipable_Images: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate{
    var pages = [UIViewController]()
    var pageControl = UIPageControl()

    override func viewDidLoad() {
        super.viewDidLoad()
        self.delegate = self
        self.dataSource = self
        configurePageControl()


        let p1: UIViewController! = storyboard?.instantiateViewController(withIdentifier: "stop1_image1")
        let p2: UIViewController! = storyboard?.instantiateViewController(withIdentifier: "stop1_image2")

        pages.append(p1)
        pages.append(p2)

        setViewControllers([p1], direction: UIPageViewController.NavigationDirection.forward, animated: false, completion: nil)
    }

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController)->UIViewController?{
        let cur = pages.index(of: viewController)!

        let prev = abs((cur - 1) % pages.count)
        return pages[prev]
    }

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController)->UIViewController?{
        let cur = pages.index(of: viewController)!

        let nxt = abs((cur+1) % pages.count)
        return pages[nxt]
    }

    func presentationIndex(for pageViewController: UIPageViewController) -> Int {
        return pages.count
    }

    func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool){
        let pageContentViewController = pageViewController.viewControllers![0]
        self.pageControl.currentPage = pages.index(of: pageContentViewController)!
    }

    //Swipe Indicator Bar
    func configurePageControl(){
        pageControl = UIPageControl(frame: CGRect(x: self.view.center.x, y: self.view.center.y, width: UIScreen.main.bounds.width, height: 50))
        self.pageControl.numberOfPages = pages.count
        self.pageControl.currentPage = 0
        self.pageControl.tintColor = UIColor.black
        self.pageControl.pageIndicatorTintColor = UIColor.white
        self.pageControl.currentPageIndicatorTintColor = UIColor.black
        self.view.addSubview(pageControl)
    }
}

我什至创建了一个新的空白页面视图控制器来进行测试,完全没有代码。我只是将 Navigation 设置为 Horizo​​ntal 并将 Transition 设置为 Scroll,仅此而已。没有代码或大惊小怪。我使用用户定义的运行时属性将背景颜色设置为随机蓝色,这样我就可以看到 nav/dot 栏(如果它在那里),但我仍然一无所获。

我错过了什么?

我想你想从 UIPageViewControllerDataSource

实现 presentationCountForPageViewControllerpresentationIndexForPageViewController

From my understanding, this should be present by default as long as Navigation is set to Horizontal and Transition style is set to Scroll, but nothing is showing.

你的理解有误

不添加页面控件。它是内置的。只要您实现这两个方法,它就会显示出来:

func presentationCount(for pvc: UIPageViewController) -> Int {
func presentationIndex(for pvc: UIPageViewController) -> Int {

不幸的是,内置的页面控件点是白色的,很难看清。使用 UIAppearance 代理来解决这个问题(通常在 applicationDidFinishLaunching 中)。例如:

let proxy = UIPageControl.appearance()
proxy.pageIndicatorTintColor = UIColor.red.withAlphaComponent(0.6)
proxy.currentPageIndicatorTintColor = .red
proxy.backgroundColor = .yellow

至少这样你会看到页面控件存在并且可以修改细节以适应。

试试这个声明:

    pageControl = UIPageControl.appearance(whenContainedInInstancesOf: [Swipable_Images.self])

并删除 self.view.addSubview(pageControl)