Swift: 仅在一个子视图控制器上隐藏状态栏
Swift: Hide status bar on only one child view controller
关于状态栏和隐藏它我遇到了问题。
设置
我有一个带有滑出式菜单的 BaseViewController。此 BaseViewController 也是应用程序的根控制器 [在 AppDelegate 中设置]:
window = UIWindow()
window?.makeKeyAndVisible()
window?.rootViewController = BaseController()
一旦我 select 一个菜单项,BaseViewController 就会被相应的 ViewController 填充 [在我将其嵌入导航控制器之后]。
菜单项 A:ViewControllerA
菜单项 B:ViewControllerB
菜单项C:ViewControllerC
假设我select菜单项A(以下代码发生在BaseViewController内):
let activeVC = UINavigationController(rootViewController: ViewControllerA())
view.addSubview(activeVC.view)
addChild(activeVC)
当我 select 另一个菜单项(比如 B 项)时,我首先删除之前的活动视图控制器(在本例中为 A 项),然后我以相同的方式添加 ViewControllerB正如我对 ViewControllerA:
所做的那样
这就是我删除以前的活动视图控制器的方式:
activeVC.view.removeFromSuperview()
activeVC.removeFromParent()
分别在每个视图控制器中操作状态栏:
我在 plist 中将 View controller-based status bar appearance 设置为 YES 控制状态栏在每个 view controller 中的外观:
然后我进入ViewController我想隐藏状态栏我添加下面的代码:
override var prefersStatusBarHidden: Bool {
return true
}
问题
如果我想将状态栏隐藏在 ViewController A、B 或 C 中的任何一个中,我做不到。覆盖 prefersStatusBarHidden 并将其设置为 "true" 将不会执行任何操作。
如果我覆盖 prefersStatusBarHidden 并将其设置为 "true" 到 BaseViewController,则 BaseViewController 以及 ViewController A、B、而C会隐藏状态栏。
我想要的
我希望能够在 ViewControllerB 上隐藏状态栏,而不在其余部分隐藏它。还有一百万美元,但我会解决的!
提前致谢!
您需要为 BaseController
和 UINavigationController
覆盖 var childForStatusBarHidden: UIViewController?
。例如:
override var childForStatusBarHidden: UIViewController? {
return children.first
}
和
extension UINavigationController {
open override var childForStatusBarHidden: UIViewController? {
return topViewController
}
}
关于状态栏和隐藏它我遇到了问题。
设置
我有一个带有滑出式菜单的 BaseViewController。此 BaseViewController 也是应用程序的根控制器 [在 AppDelegate 中设置]:
window = UIWindow()
window?.makeKeyAndVisible()
window?.rootViewController = BaseController()
一旦我 select 一个菜单项,BaseViewController 就会被相应的 ViewController 填充 [在我将其嵌入导航控制器之后]。
菜单项 A:ViewControllerA
菜单项 B:ViewControllerB
菜单项C:ViewControllerC
假设我select菜单项A(以下代码发生在BaseViewController内):
let activeVC = UINavigationController(rootViewController: ViewControllerA())
view.addSubview(activeVC.view)
addChild(activeVC)
当我 select 另一个菜单项(比如 B 项)时,我首先删除之前的活动视图控制器(在本例中为 A 项),然后我以相同的方式添加 ViewControllerB正如我对 ViewControllerA:
所做的那样这就是我删除以前的活动视图控制器的方式:
activeVC.view.removeFromSuperview()
activeVC.removeFromParent()
分别在每个视图控制器中操作状态栏:
我在 plist 中将 View controller-based status bar appearance 设置为 YES 控制状态栏在每个 view controller 中的外观:
然后我进入ViewController我想隐藏状态栏我添加下面的代码:
override var prefersStatusBarHidden: Bool {
return true
}
问题
如果我想将状态栏隐藏在 ViewController A、B 或 C 中的任何一个中,我做不到。覆盖 prefersStatusBarHidden 并将其设置为 "true" 将不会执行任何操作。
如果我覆盖 prefersStatusBarHidden 并将其设置为 "true" 到 BaseViewController,则 BaseViewController 以及 ViewController A、B、而C会隐藏状态栏。
我想要的
我希望能够在 ViewControllerB 上隐藏状态栏,而不在其余部分隐藏它。还有一百万美元,但我会解决的!
提前致谢!
您需要为 BaseController
和 UINavigationController
覆盖 var childForStatusBarHidden: UIViewController?
。例如:
override var childForStatusBarHidden: UIViewController? {
return children.first
}
和
extension UINavigationController {
open override var childForStatusBarHidden: UIViewController? {
return topViewController
}
}