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

问题描述 投票:0回答:1

当涉及到状态栏并隐藏它时,我遇到了问题。

The setup

我有一个带有滑出菜单的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()

Manipulating the status bar in each view controller separately:

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

enter image description here

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

override var prefersStatusBarHidden: Bool {
    return true
}

The problem

如果我想隐藏任何ViewController A,B或C中的状态栏,我不能。覆盖prefersStatusBarHidden并将其设置为“true”将不会执行任何操作。

如果我覆盖prefersStatusBarHidden并将其设置为“true”到BaseViewController中,那么BaseViewController以及ViewController A,B和C中的任何一个都将隐藏状态栏。

What I want

我希望能够隐藏ViewController上的状态栏而不将其隐藏在其余部分上。还有一百万美元,但我会解决这个问题!

提前致谢!

ios swift statusbar
1个回答
0
投票

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

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

extension UINavigationController {

    open override var childForStatusBarHidden: UIViewController? {
        return topViewController
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.