Swift/iOS8: Почему индикаторы контроля страниц не отображаются?
Я реализую простой контроллер просмотра галереи, где приложение отображает небольшой диапазон полноэкранных изображений, которые пользователь может прокручивать. Я использую 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
который заполняет весь экран. Однако даже когда я уменьшаю его размер в нижней части экрана, я не вижу никаких индикаторов на странице. Я что-то пропустил? Дайте мне знать, если я не предоставил достаточную информацию. Я пытался переписать старое приложение, которое я закодировал в Objective-C более 5 лет назад - полностью в Swift для iOS8 и Xcode и т.д. Так сильно изменилось, что это сбивает с толку. Благодарю!
Ответы
Ответ 1
Взято отсюда:
Чтобы показать UIPageControl, вам нужно реализовать два дополнительных метода источника данных. Просто верните все количество страниц для представленияCountForPageViewController и первоначально выбранный индекс для presentationIndexForPageViewController
func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int {
return pageContent.count
}
func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int {
return 0
}
Ответ 2
Почему бы не использовать быструю версию 3+ Zell B. Ответ
func presentationCount(for pageViewController: UIPageViewController) -> Int {
return self.providerItemList?.providerItems?.count ?? 0
}
func presentationIndex(for pageViewController: UIPageViewController) -> Int {
return 0
}
Ответ 3
Даже если вы измените цвет 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
Ответ 4
Хотя во многих из этих ответов ответ встречается в изобилии, я просто хочу четко дать понять, что вам нужно установить для UIPageViewController значение "Прокрутка", прежде чем эти методы будут задействованы.
Ответ 5
Моя ошибка заключалась в том, чтобы установить значение count больше, чем фактические страницы содержимого в моем контроллере просмотра страниц в методе делегирования presentationCount().
Ответ 6
Точки белые или полупрозрачные белые. Убедитесь, что фон не белый, или измените цвет точек.