【问题标题】:Page View Controller does not show dots页面视图控制器不显示点
【发布时间】:2019-04-24 17:27:10
【问题描述】:

我创建了一个滚动的 pageviewcontroller,但我无法显示点/条。据我了解,只要将 Navigation 设置为 Horizo​​ntal 并且将 Transition 样式设置为 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)
    }
}

我什至继续创建了一个新的空白页面视图控制器来测试,根本不需要代码。我只是将导航设置为水平并将过渡设置为滚动,仅此而已。没有代码或大惊小怪。我使用用户定义的运行时属性将背景颜色设置为随机蓝色,这样我就可以看到导航/点栏(如果它在那里),但我仍然一无所获。

我错过了什么?

【问题讨论】:

标签: ios swift uipageviewcontroller


【解决方案1】:

据我了解,只要将 Navigation 设置为 Horizo​​ntal 并且将 Transition 样式设置为 Scroll,默认情况下它应该存在,但没有显示任何内容。

你的理解是错误的。

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

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

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

【讨论】:

  • 是的,这对我来说非常有效。不知道为什么我发现的其他问题和答案中缺少这些信息,但这正是我所需要的!
【解决方案2】:

我认为您想从UIPageViewControllerDataSource 实现presentationCountForPageViewControllerpresentationIndexForPageViewController

【讨论】:

    【解决方案3】:

    试试这个声明:

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

    并删除 self.view.addSubview(pageControl)

    【讨论】:

      猜你喜欢
      • 2023-04-01
      • 1970-01-01
      • 2012-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-12
      • 1970-01-01
      相关资源
      最近更新 更多