关于状态栏并隐藏它,我遇到了问题。
我有一个带有滑出菜单的 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中状态栏的外观:
然后我进入ViewController,我想隐藏状态栏,然后添加以下代码:
override var prefersStatusBarHidden: Bool {
return true
}
如果我想将状态栏隐藏在ViewController A,B或C中,则不能。覆盖preferredsStatusBarHidden并将其设置为“ true”将无济于事。
如果我重写了preferredsStatusBarHidden并将其设置为“ true”到BaseViewController中,则BaseViewController以及ViewController A,B和C中的任何一个都将隐藏状态栏。
我希望能够在ViewControllerB上隐藏状态栏,而不在其余部分上隐藏它。也是一百万美元,但我会解决的!!
谢谢!
答案 0 :(得分:0)
您需要为var childForStatusBarHidden: UIViewController?
和BaseController
覆盖UINavigationController
。例如:
override var childForStatusBarHidden: UIViewController? {
return children.first
}
和
extension UINavigationController {
open override var childForStatusBarHidden: UIViewController? {
return topViewController
}
}