当涉及到状态栏并隐藏它时,我遇到了问题。
我有一个带有滑出菜单的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控制器的状态栏外观设置为YES,每个视图控制器中状态栏的外观:
然后我进入ViewController我想隐藏状态栏,我添加以下代码:
override var prefersStatusBarHidden: Bool {
return true
}
如果我想隐藏任何ViewController A,B或C中的状态栏,我不能。覆盖prefersStatusBarHidden并将其设置为“true”将不会执行任何操作。
如果我覆盖prefersStatusBarHidden并将其设置为“true”到BaseViewController中,那么BaseViewController以及ViewController A,B和C中的任何一个都将隐藏状态栏。
我希望能够隐藏ViewController上的状态栏而不将其隐藏在其余部分上。还有一百万美元,但我会解决这个问题!
提前致谢!
你需要为var childForStatusBarHidden: UIViewController?
和BaseController
覆盖UINavigationController
。例如:
override var childForStatusBarHidden: UIViewController? {
return children.first
}
和
extension UINavigationController {
open override var childForStatusBarHidden: UIViewController? {
return topViewController
}
}