我正在实现一个简单的图库视图控制器,其中应用程序显示用户可以滚动的一小部分全屏图像。我使用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等已经发生了很大变化,这让人感到困惑。
谢谢!
答案 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”。如果您在导航器中单击它,它应该在屏幕上找到它(看一下截图)
你可以改变这样的位置:
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)
点是白色或半透明的白色。确保背景不是白色,或更改圆点的颜色。