ios - 页面 View Controller 不显示点

标签 ios swift uipageviewcontroller

我已经创建了一个滚动的 pageviewcontroller,但我无法让点/条显示出来。据我了解,只要 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)
    }
}

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

我错过了什么?

最佳答案

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

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

关于ios - 页面 View Controller 不显示点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55835530/

相关文章:

objective-c - 不了解 UIActivityIndi​​catorView 如何与 NSTimer 一起工作

ios - 如何显示AVPlayer播放音频的进度

ios - 检测长按tableview

swift - tableview 没有用导航栏填满 Storyboard 中的整个屏幕

ios - 如何解决 "Failed to determine navigation direction for scroll"错误

ios - 标记帖子时从 firebase 中删除一个 child

iphone - iOS 为 HTML5 Canvas 的高度宽度设置了哪些最大值?

swift - 从单个串行队列访问 Swift 实例变量导致 Thread Sanitizer 问题

ios - 为什么我在运行 PageViewController 后会收到此错误?

ios - UIPageViewController 中的 AlertViewController