prefersStatusBarHidden 没有被调用
prefersStatusBarHidden isn't getting called
我有一个标准的主从应用程序,我正在尝试有条件地 show/hide 状态栏。
在 MasterViewController 中覆盖 prefersStatusBarHidden()
没有任何作用。它甚至从未被调用。
override func prefersStatusBarHidden() -> Bool {
return true
}
在 Info.plist 中设置 UIViewControllerBasedStatusBarAppearance
没有帮助,大概是因为 YES
已经是默认值了。调用 setNeedsStatusBarAppearanceUpdate()
也无济于事。
我的目标是 iOS 9.
答案是从 window 的根视图控制器开始覆盖 prefersStatusBarHidden()
。在主从应用程序中,这需要子类化 UISplitViewController
以将消息向下转发到视图控制器层次结构。
像这样:
override func prefersStatusBarHidden() -> Bool {
if var topViewController = self.viewControllers.first {
if let navigationController = topViewController as? UINavigationController {
topViewController = navigationController.topViewController!
}
return topViewController.prefersStatusBarHidden()
}
return super.prefersStatusBarHidden()
}
有一个更简洁的解决方案。有一个函数 childViewControllerForStatusBarHidden
专门设计用于 return 应该将 prefersStatusBarHidden 转发到的 child 视图控制器。
所以,覆盖它会更好。它看起来像这样:
override func childViewControllerForStatusBarHidden() -> UIViewController? {
if var topViewController = self.viewControllers.first {
if let navigationController = topViewController as? UINavigationController {
topViewController = navigationController.topViewController!
}
return topViewController
}
return super.childViewControllerForStatusBarHidden()
}
也许您甚至可以省略以下内容。 NavigationViewController 有自己的 childViewControllerForStatusBarHidden() 它将发送到 child viewcontroller.
if let navigationController = topViewController as? UINavigationController {
topViewController = navigationController.topViewController!
}
如果您对所有拆分视图控制器都很好,这对我有用:
extension UISplitViewController {
override open var childForStatusBarHidden: UIViewController? {
return (viewControllers.last as? UINavigationController)?.visibleViewController
}
}
我有一个标准的主从应用程序,我正在尝试有条件地 show/hide 状态栏。
在 MasterViewController 中覆盖 prefersStatusBarHidden()
没有任何作用。它甚至从未被调用。
override func prefersStatusBarHidden() -> Bool {
return true
}
在 Info.plist 中设置 UIViewControllerBasedStatusBarAppearance
没有帮助,大概是因为 YES
已经是默认值了。调用 setNeedsStatusBarAppearanceUpdate()
也无济于事。
我的目标是 iOS 9.
答案是从 window 的根视图控制器开始覆盖 prefersStatusBarHidden()
。在主从应用程序中,这需要子类化 UISplitViewController
以将消息向下转发到视图控制器层次结构。
像这样:
override func prefersStatusBarHidden() -> Bool {
if var topViewController = self.viewControllers.first {
if let navigationController = topViewController as? UINavigationController {
topViewController = navigationController.topViewController!
}
return topViewController.prefersStatusBarHidden()
}
return super.prefersStatusBarHidden()
}
有一个更简洁的解决方案。有一个函数 childViewControllerForStatusBarHidden
专门设计用于 return 应该将 prefersStatusBarHidden 转发到的 child 视图控制器。
所以,覆盖它会更好。它看起来像这样:
override func childViewControllerForStatusBarHidden() -> UIViewController? {
if var topViewController = self.viewControllers.first {
if let navigationController = topViewController as? UINavigationController {
topViewController = navigationController.topViewController!
}
return topViewController
}
return super.childViewControllerForStatusBarHidden()
}
也许您甚至可以省略以下内容。 NavigationViewController 有自己的 childViewControllerForStatusBarHidden() 它将发送到 child viewcontroller.
if let navigationController = topViewController as? UINavigationController {
topViewController = navigationController.topViewController!
}
如果您对所有拆分视图控制器都很好,这对我有用:
extension UISplitViewController {
override open var childForStatusBarHidden: UIViewController? {
return (viewControllers.last as? UINavigationController)?.visibleViewController
}
}