XCode页面视图控制器:使点透明

时间:2018-07-27 11:43:24

标签: xcode

我添加了一个页面视图控制器和一个3页。 我将过渡样式设置为滚动,并实现了presentationCountpresentationIndex方法。现在,我在视图底部得到一个带有灰色/白色点的黑色条。但是,但是我希望视图转到底部,并使点出现在底部(没有黑色背景)。 我该怎么办?

这是我的代码:

import UIKit

class FilterViewController: UIPageViewController, UIPageViewControllerDataSource {



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

        if let firstViewController = orderedViewControllers.first {
            setViewControllers([firstViewController],
                               direction: .forward,
                               animated: true,
                               completion: nil)
        }


        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    private(set) lazy var orderedViewControllers: [UIViewController] = {
        return [self.newViewController(category: "first"),
                self.newViewController(category: "second"),
                self.newViewController(category: "third")]
    }()

    private func newViewController(category: String) -> UIViewController {
        return UIStoryboard(name: "Main", bundle: nil) .
            instantiateViewController(withIdentifier: "\(category)ViewController")
    }

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {

        guard let viewControllerIndex = orderedViewControllers.index(of: viewController) else {
            return nil
        }

        let previousIndex = viewControllerIndex - 1

        guard previousIndex >= 0 else {
            return orderedViewControllers.last
        }

        guard orderedViewControllers.count > previousIndex else {
            return nil
        }

        return orderedViewControllers[previousIndex]
    }

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
        guard let viewControllerIndex = orderedViewControllers.index(of: viewController) else {
            return nil
        }

        let nextIndex = viewControllerIndex + 1
        let orderedViewControllersCount = orderedViewControllers.count

        guard orderedViewControllersCount != nextIndex else {
            return orderedViewControllers.first
        }

        guard orderedViewControllersCount > nextIndex else {
            return nil
        }

        return orderedViewControllers[nextIndex]
    }

    func presentationCount(for pageViewController: UIPageViewController) -> Int {
        return orderedViewControllers.count
    }

    func presentationIndex(for pageViewController: UIPageViewController) -> Int {
        guard let firstViewController = viewControllers?.first,
            let firstViewControllerIndex = orderedViewControllers.index(of: firstViewController) else {
                return 0
        }

        return firstViewControllerIndex
    }


}

page view controller

1 个答案:

答案 0 :(得分:2)

好的,我自己弄的。如果有人遇到相同的问题,只需覆盖页面视图控制器的viewDidLayoutSubviews()

override func viewDidLayoutSubviews() {
        let v = self.view
        let subviews = v?.subviews
        if subviews?.count == 2 {
            var sv:UIScrollView?
            var pc:UIPageControl?
            for t in subviews! {
                if t is UIScrollView {
                    sv = t as! UIScrollView
                } else {
                    pc = t as! UIPageControl
                }
            }
            if(sv != nil && pc != nil) {
                sv?.frame = (v?.bounds)!
                v?.bringSubview(toFront: pc!)
            }
        }
        super.viewDidLayoutSubviews()
    }