ios - 如何隐藏 UIPageViewController 上的状态栏? (所有 View Controller )

标签 ios swift statusbar uipageviewcontroller

我已经搜索了在这里可以找到的每个问题/答案,但我不知道如何隐藏 UIPageViewController 中所有 View Controller 的状态栏。这是我的 UIPageViewController 类中的代码:

    class TipsVC: UIPageViewController, UIPageViewControllerDelegate {

        lazy var VCArr: [UIViewController] = {
            return [self.VCInstance(name: "T1"),
                    self.VCInstance(name: "T2"),
                    self.VCInstance(name: "T3")]
        }()

        private func VCInstance(name: String) -> UIViewController {
            return UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: name)

 }
        override public func viewDidLoad() {
            super.viewDidLoad()
            //self.dataSource = self
            self.delegate = self
            if let OB1 = VCArr.first {
                setViewControllers([OB1], direction: .forward, animated: true, completion: nil)
                let pageController = UIPageControl.appearance()
                pageController.pageIndicatorTintColor = UIColor(red:1.00, green:0.88, blue:0.92, alpha:1.0)
                pageController.currentPageIndicatorTintColor = UIColor(red:1.00, green:0.25, blue:0.51, alpha:1.0)
            }


        }

        override func viewDidLayoutSubviews() {
            super.viewDidLayoutSubviews()
            for view in self.view.subviews {
                if view is UIScrollView {
                    view.frame = UIScreen.main.bounds
                } else if view is UIPageControl {
                    view.backgroundColor = UIColor.clear
                }
            }
        }

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

            let previousIndex = viewControllerIndex - 1

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

            guard VCArr.count > previousIndex else {
                return nil
            }

            return VCArr[previousIndex]
        }

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

            let nextIndex = viewControllerIndex + 1

            guard nextIndex < VCArr.count else {
                return VCArr.first
            }

            guard VCArr.count > nextIndex else {
                return nil
            }

            return VCArr[nextIndex]
        }

        public func presentationCount(for pageViewController: UIPageViewController) -> Int{

            return VCArr.count

        }

        public func presentationIndex(for pageViewController: UIPageViewController) -> Int{

            guard let OB1 = viewControllers?.first,
                let OB1Index = VCArr.index(of: OB1) else {
                    return 0

            }

            return OB1Index
        }

        public func nextPageWithIndex(index: Int)
        {
            let nextVC = VCArr[index]
            setViewControllers([nextVC], direction: .forward, animated: true, completion: nil)

        }


    }

这是我的一个 View Controller 的代码示例:

    class T1: UIViewController {

        @IBOutlet var nextBtn: UIButton!


        override func viewDidLoad() {
            super.viewDidLoad()

        }

        override func viewDidAppear(_ animated: Bool) {

            super.viewDidAppear(true)
            UIApplication.shared.isStatusBarHidden = true

        }

        @IBAction func nextBtnDidPress(_ sender: Any) {


            let next = self.parent as! TipsVC
            next.nextPageWithIndex(index: 1)

    }

}

我很清楚如何在常规 View Controller 上隐藏状态栏,但是当我使用 UIPageViewController 时我无法获得相同的结果。这是怎么回事?

最佳答案

要从特定的 viewController 中隐藏状态栏,您需要在 viewWillAppear 中隐藏状态栏,并在 viewWillDisAppear 中隐藏状态栏

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    UIApplication.shared.isStatusBarHidden = true
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    UIApplication.shared.isStatusBarHidden = false
}

viewWillAppear 将在打开特定 viewController 之前调用,viewWillDisAppear 将在关闭特定 viewController 之后调用

如果您遇到 UIPageViewController 问题,请使用 UIViewController 并将 UIPageViewController 嵌入其中以供引用检查下面的代码

        var pageContainer: UIPageViewController!

        pageContainer = UIPageViewController(transitionStyle: .scroll, navigationOrientation: .horizontal, options: nil)
        pageContainer.delegate = self
        pageContainer.dataSource = self
        pageContainer.setViewControllers([getViewControllerAtIndex(index: 0)] as [UIViewController], direction: .forward, animated: false, completion: nil)
        pageContainer.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)
        self.view.addSubview(pageContainer.view)

希望这对您有帮助

关于ios - 如何隐藏 UIPageViewController 上的状态栏? (所有 View Controller ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47550505/

相关文章:

iphone - ios应用最大内存预算

ios - 集成 google map api iOS 时 map 未加载

arrays - 字典中值的总和 - Swift

javascript - WKWebView 加载的 HTML 文件中嵌入的 JavaScript 是否可以访问?

java - 向 Java 应用程序添加状态栏

ios - 在时间间隔后更改整数值 ios

ios - 列表中的事件指示器

ios - 不调用didSelectRowAtIndexPath获取UITableViewCell数据

ios - 将 UIView 放在某些 View Controller 的状态栏顶部

xcode - ionic 状态栏白底白字