Контроллер просмотра страницы не показывает точки - PullRequest
0 голосов
/ 24 апреля 2019

Я создал прокручиваемый контроллер просмотра страниц, но не могу отобразить точки / панели.Насколько я понимаю, это должно присутствовать по умолчанию, если для параметра «Навигация» установлено значение «Горизонтально», а для стиля перехода - «Прокрутка», но ничего не отображается.

Затем я добавил некоторый дополнительный код для добавления и стилизации точек, но все равно ничего.Вот мой код в его нынешнем виде:

import UIKit

class Swipable_Images: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate{
    var pages = [UIViewController]()
    var pageControl = UIPageControl()

    override func viewDidLoad() {
        super.viewDidLoad()
        self.delegate = self
        self.dataSource = self
        configurePageControl()


        let p1: UIViewController! = storyboard?.instantiateViewController(withIdentifier: "stop1_image1")
        let p2: UIViewController! = storyboard?.instantiateViewController(withIdentifier: "stop1_image2")

        pages.append(p1)
        pages.append(p2)

        setViewControllers([p1], direction: UIPageViewController.NavigationDirection.forward, animated: false, completion: nil)
    }

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController)->UIViewController?{
        let cur = pages.index(of: viewController)!

        let prev = abs((cur - 1) % pages.count)
        return pages[prev]
    }

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController)->UIViewController?{
        let cur = pages.index(of: viewController)!

        let nxt = abs((cur+1) % pages.count)
        return pages[nxt]
    }

    func presentationIndex(for pageViewController: UIPageViewController) -> Int {
        return pages.count
    }

    func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool){
        let pageContentViewController = pageViewController.viewControllers![0]
        self.pageControl.currentPage = pages.index(of: pageContentViewController)!
    }

    //Swipe Indicator Bar
    func configurePageControl(){
        pageControl = UIPageControl(frame: CGRect(x: self.view.center.x, y: self.view.center.y, width: UIScreen.main.bounds.width, height: 50))
        self.pageControl.numberOfPages = pages.count
        self.pageControl.currentPage = 0
        self.pageControl.tintColor = UIColor.black
        self.pageControl.pageIndicatorTintColor = UIColor.white
        self.pageControl.currentPageIndicatorTintColor = UIColor.black
        self.view.addSubview(pageControl)
    }
}

Я даже пошел дальше и создал новый контроллер просмотра пустых страниц для тестирования без кода вообще.Я просто установил навигацию по горизонтали и переход к прокрутке и больше ничего.Нет кода или возни с ним.Я использовал определяемый пользователем атрибут времени выполнения, чтобы установить цвет фона на случайный синий, чтобы я мог видеть панель навигации / точки, если она была там, но я все еще ничего не получаю.

Чего мне не хватает?

Ответы [ 3 ]

1 голос
/ 24 апреля 2019

Насколько я понимаю, это должно присутствовать по умолчанию, если для параметра Навигация установлено значение Горизонтально, а для стиля перехода установлено значение Прокрутка, но ничего не отображается.

Ваше понимание неверно.

Не добавлять элемент управления страницы. Он встроен. Он будет отображаться при условии, что вы реализуете эти два метода:

func presentationCount(for pvc: UIPageViewController) -> Int {
func presentationIndex(for pvc: UIPageViewController) -> Int {

К сожалению, встроенные точки управления страницами белого цвета, что затрудняет их просмотр. Используйте прокси-сервер UIAppearance, чтобы исправить это (обычно в applicationDidFinishLaunching). Например:

let proxy = UIPageControl.appearance()
proxy.pageIndicatorTintColor = UIColor.red.withAlphaComponent(0.6)
proxy.currentPageIndicatorTintColor = .red
proxy.backgroundColor = .yellow

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

0 голосов
/ 24 апреля 2019

Попробуйте это объявление:

    pageControl = UIPageControl.appearance(whenContainedInInstancesOf: [Swipable_Images.self])

и удалите self.view.addSubview (pageControl)

0 голосов
/ 24 апреля 2019

Я думаю, что вы хотите реализовать presentationCountForPageViewController и presentationIndexForPageViewController от UIPageViewControllerDataSource

...