Swift / iOS8:为什么页面控制指示器没有显示?

时间:2015-06-19 16:34:49

标签: ios swift uipageviewcontroller uipagecontrol

我正在实现一个简单的图库视图控制器,其中应用程序显示用户可以滚动的一小部分全屏图像。我使用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等已经发生了很大变化,这让人感到困惑。 谢谢!

6 个答案:

答案 0 :(得分:22)

取自here

  

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

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

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

答案 1 :(得分:21)

为什么不使用 swell 3 + Zell B。的回答

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

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

答案 2 :(得分:10)

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

enter image description here

你可以改变这样的位置:

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

答案 3 :(得分:1)

尽管许多答案中都出现了很多答案,但我只是想明确表明,在这些方法被点击之前,您需要将UIPageViewController设置为“ Scroll”。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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