iOS 7 – 隐藏子视图控制器上的状态栏

UIApplication.SharedApplication.SetStatusBarHidden (MonoTouch代码,也适用于Obj-C)完成iOS 6的工作,但对于iOS 7,我们必须:

  1. 在视图控制器上调用SetNeedsStatusBarAppearanceUpdate () (例如:显示全屏图像的视图控制器)
  2. 在同一视图控制器上覆盖PrefersStatusBarHidden ()

然而,上面提到的视图控制器embedded在导航栏中,导航栏也embedded在滑出菜单中。 即使使用AddChildViewController()将所有embedded式视图控制器添加到层次结构中,尝试更新子视图控制器中的状态栏也不起作用。

有任何想法吗?


编辑

 Window.RootViewController (Menu) |___ ViewControllerA (Navigation Bar) |___ ViewControllerB (Actual View controller) 

ViewControllerB想要隐藏/显示状态栏

ViewControllerA应该重写childViewControllerForStatusBarHidden并返回ViewControllerB。

 - (UIViewController *)childViewControllerForStatusBarHidden { return _viewControllerB; } 

它并不完全是你想要做的。 如果你想简单地隐藏所有子视图控件中的状态栏,你可以设置新的plist属性UIViewControllerBasedStatusBarAppearance

…如果您希望select退出此行为,并使用UIApplication statusBarStyle方法设置状态栏样式,请将UIViewControllerBasedStatusBarAppearance关键字添加到应用程序的Info.plist文件中,并将其值设置为NO。

来源: https : //developer.apple.com/library/ios/documentation/UserExperience/Conceptual/TransitionGuide/Bars.html#//apple_ref/doc/uid/TP40013174-CH8-SW1

源代码是一个非常好的参考与iOS7中处理UINavigationBarUIStatusBar有关的各种信息。