【问题标题】:Swift/iOS8: Why are Page Control indicators not showing?Swift/iOS8:为什么不显示页面控制指示器?
【发布时间】:2015-06-19 16:34:49
【问题描述】:

我正在实现一个简单的画廊视图控制器,该应用程序显示一小部分用户可以滚动浏览的全屏图像。我正在使用我认为的 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 for iOS8 和 Xcode 等中发生了很大变化,令人困惑。 谢谢!

【问题讨论】:

    标签: ios swift uipageviewcontroller uipagecontrol


    【解决方案1】:

    取自here

    为了显示 UIPageControl,您需要实现两个可选的数据源方法。只返回presentationCountForPageViewController的全部页数和presentationIndexForPageViewController最初选择的索引

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

    【讨论】:

    • 我在我的 presentationCountForPageViewController 方法中放置了一个 println 语句进行调试,但它永远不会被调用。这可能是为什么我的页面计数器点没有显示 - 但为什么它没有被调用?页面计数器是使用 UIPageViewController 自动创建的吗?
    • 你永远不会将 pageController.view 添加为 self.view 的子视图。
    • @PompeyCasmilus 您可能使用了这些函数的错误版本。所有 Apple 框架方法的名称都进行了重构,以匹配新的 Swift 命名约定。我经常调用错误的版本。
    • 请注意,虽然问题已经有了这个,但问题是您需要设置 transitionStyle: .scroll, navigationOrientation: .horizontal 才能使上述方法起作用。
    • 对于 Swift 3,函数名称必须是:presentationCount(for pageViewController: UIPageViewController)
    【解决方案2】:

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

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

    【讨论】:

    • 这是为我做的。旧的方法名称(例如:func presentationCountForPageViewController)在 Xcode 中没有被标记并且仍然完全有效。切换到新方法名称现在会显示页面控制指示器。
    • 我也一样!
    • 上帝保佑你!!
    • 最佳答案!
    【解决方案3】:

    即使您将更改 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
    

    【讨论】:

    • 你只是忘了提到如何解决它!
    • @JoeGalind 我添加了一些基本解决方案。
    【解决方案4】:

    尽管答案出现在许多这些答案中,但我只想明确说明,您需要将 UIPageViewController 设置为“滚动”,然后这些方法才会受到影响。

    【讨论】:

    • 这修复了它。谢谢! :)
    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

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

      【讨论】:

        猜你喜欢
        • 2017-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        • 2013-04-21
        • 2016-12-09
        • 1970-01-01
        相关资源
        最近更新 更多