【问题标题】:Hide status bar on iOS Swift在 iOS Swift 上隐藏状态栏
【发布时间】:2020-06-18 07:19:22
【问题描述】:

在我的应用程序中,对于特定屏幕,我需要隐藏状态栏。我的屏幕层次结构是:

MainScreen -> ScreenA -> ScreenB -> Screenc

在我的屏幕中,我需要隐藏状态栏。所以我这样做:

 override var prefersStatusBarHidden: Bool {
        return true
    }

一切正常。但是当我从Screenc 退回时,我的ScreenB, ScreenA 状态栏和导航栏重叠。像我的ScreenB, ScreenAtitleright bar button,都与状态栏重叠。但我的状态栏也显示在ScreenB, ScreenA

不知道为什么会这样。在我的 plist 文件中,我有:

View controller-based status bar appearance : YES

我无法将其更改为“否”。因为在我的应用程序中,我正在使用将肖像固定到特定的视图控制器。

我该如何解决这些问题?

【问题讨论】:

    标签: ios swift iphone xcode statusbar


    【解决方案1】:

    你可以做的是在出现和消失中显示和隐藏

       override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(animated)
            navigationController?.isNavigationBarHidden = true
        }
    
        override func viewWillDisappear(_ animated: Bool) {
            super.viewWillDisappear(animated)
            navigationController?.isNavigationBarHidden = false
        }
    

    【讨论】:

    • 我可以知道navigationController?.isNavigationBarHiddenself.navigationController?.navigationBar.isHidden 的区别吗?当我在做这个隐藏self.navigationController?.navigationBar.isHidden它不工作
    • isNavigationBarHidden base 是 UIViewControllerisHidden base 是 UIView
    • 只是为了理解,为什么self.navigationController?.navigationBar.isHidden 不能正常工作。但它隐藏了导航栏。当我向后移动时,我的导航栏向上移动。当我隐藏导航栏和状态栏时是否发生任何问题。
    • 对此不太了解..您可以发布这个具体问题...
    【解决方案2】:

    在viewDidLoad()函数中添加

    self.navigationController?.isNavigationBarHidden = true
    

    并且在你之前的 ViewController 上的 viewDidAppear 方法中添加

    self.navigationController?.isNavigationBarHidden = false
    

    【讨论】:

    • 它已经隐藏在我当前的 vc 中了。但是,当我返回之前的屏幕状态栏和导航栏时,就乱了。这个 vc 在我的导航控制器堆栈中
    • 在我当前的 VC 中,我隐藏了导航栏。但是当我返回上一个屏幕时,我的导航栏和状态栏就乱了
    • 在我之前的屏幕中,我可以看到导航栏和状态栏。但两者是重叠的。像一个另一个....我先一个一个做了。首先我隐藏导航栏并取消隐藏导航栏..它工作正常..没有重叠问题。但是如果我隐藏我的状态栏,那么我就会遇到重叠问题