Swift:仅在一个子视图控制器上隐藏状态栏

时间:2019-04-23 21:05:41

标签: ios swift statusbar

关于状态栏并隐藏它,我遇到了问题。

设置

我有一个带有滑出菜单的 BaseViewController 。此BaseViewController也是应用程序的根控制器[在AppDelegate内部设置]:

window = UIWindow()
window?.makeKeyAndVisible()
window?.rootViewController = BaseController()

一旦我选择一个菜单项,BaseViewController就会被相应的ViewController填充[在我将其嵌入到导航控制器之后]。

菜单项A: ViewControllerA

菜单项B: ViewControllerB

菜单项C: ViewControllerC

假设我选择菜单项A(以下代码发生在BaseViewController中):

let activeVC = UINavigationController(rootViewController: ViewControllerA())
view.addSubview(activeVC.view)
addChild(activeVC)

当我选择另一个菜单项(例如项B)时,我首先删除了以前的活动视图控制器(在本例中为项A),然后以与对ViewControllerA相同的方式添加了ViewControllerB:

这是我删除以前的活动视图控制器的方式:

activeVC.view.removeFromSuperview()
activeVC.removeFromParent()

分别在每个视图控制器中操作状态栏:

我在 plist 中将基于View Controller的状态栏外观设置为YES,以控制每个View Controller中状态栏的外观:

enter image description here

然后我进入ViewController,我想隐藏状态栏,然后添加以下代码:

override var prefersStatusBarHidden: Bool {
    return true
}

问题

如果我想将状态栏隐藏在ViewController A,B或C中,则不能。覆盖preferredsStatusBarHidden并将其设置为“ true”将无济于事。

如果我重写了preferredsStatusBarHidden并将其设置为“ true”到BaseViewController中,则BaseViewController以及ViewController A,B和C中的任何一个都将隐藏状态栏。

我想要的

我希望能够在ViewControllerB上隐藏状态栏,而不在其余部分上隐藏它。也是一百万美元,但我会解决的!!

谢谢!

1 个答案:

答案 0 :(得分:0)

您需要为var childForStatusBarHidden: UIViewController?BaseController覆盖UINavigationController。例如:

override var childForStatusBarHidden: UIViewController? {
    return children.first
}

extension UINavigationController {

    open override var childForStatusBarHidden: UIViewController? {
        return topViewController
    }
}