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". Если вы щелкнете по нему в навигаторе, он должен найти его на экране (посмотрите на скриншот)

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

Ответ 4

Хотя во многих из этих ответов ответ встречается в изобилии, я просто хочу четко дать понять, что вам нужно установить для UIPageViewController значение "Прокрутка", прежде чем эти методы будут задействованы.

Ответ 5

Моя ошибка заключалась в том, чтобы установить значение count больше, чем фактические страницы содержимого в моем контроллере просмотра страниц в методе делегирования presentationCount().

Ответ 6

Точки белые или полупрозрачные белые. Убедитесь, что фон не белый, или измените цвет точек.