Swift/iOS8: 为什么页面控制指标不显示?
Swift/iOS8: Why are Page Control indicators not showing?
我正在实现一个简单的图库视图控制器,应用程序在其中显示用户可以滚动浏览的小范围全屏图像。我正在使用我认为的 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 等已经改变了很多,很混乱。
谢谢!
摘自 here :
In order to show UIPageControl, you need to implement two optional datasource methods. Just return the whole number of pages for presentationCountForPageViewController and the initially selected index for presentationIndexForPageViewController
func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int {
return pageContent.count
}
func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int {
return 0
}
为什么不使用 swift 3+ 版本的 Zell B. 的回答
func presentationCount(for pageViewController: UIPageViewController) -> Int {
return self.providerItemList?.providerItems?.count ?? 0
}
func presentationIndex(for pageViewController: UIPageViewController) -> Int {
return 0
}
即使您要更改 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
我的错误是在 presentationCount() 委托方法的页面视图控制器中将计数值设置为大于实际内容页面。
尽管这些答案中有很多答案,但我只想明确说明,您需要将 UIPageViewController 设置为 'Scroll',然后这些方法才会被调用。
点是白色的,或者是半透明的白色。请确保背景不是白色,或更改圆点的颜色。
我正在实现一个简单的图库视图控制器,应用程序在其中显示用户可以滚动浏览的小范围全屏图像。我正在使用我认为的 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 等已经改变了很多,很混乱。
谢谢!
摘自 here :
In order to show UIPageControl, you need to implement two optional datasource methods. Just return the whole number of pages for presentationCountForPageViewController and the initially selected index for presentationIndexForPageViewController
func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int {
return pageContent.count
}
func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int {
return 0
}
为什么不使用 swift 3+ 版本的 Zell B. 的回答
func presentationCount(for pageViewController: UIPageViewController) -> Int {
return self.providerItemList?.providerItems?.count ?? 0
}
func presentationIndex(for pageViewController: UIPageViewController) -> Int {
return 0
}
即使您要更改 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
我的错误是在 presentationCount() 委托方法的页面视图控制器中将计数值设置为大于实际内容页面。
尽管这些答案中有很多答案,但我只想明确说明,您需要将 UIPageViewController 设置为 'Scroll',然后这些方法才会被调用。
点是白色的,或者是半透明的白色。请确保背景不是白色,或更改圆点的颜色。