4

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

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

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

有任何想法吗?


编辑

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

想要ViewControllerB隐藏/显示状态栏的位置

4

2 回答 2

7

ViewControllerA 应该覆盖 childViewControllerForStatusBarHidden 并返回 ViewControllerB。

- (UIViewController *)childViewControllerForStatusBarHidden {
    return _viewControllerB;
}
于 2013-10-02T16:42:40.767 回答
1

它看起来并不完全是您尝试做的事情。如果您只是想在所有子视图控制器中隐藏状态栏,您可以设置新的 plist 属性UIViewControllerBasedStatusBarAppearance

...如果您更愿意选择退出此行为并使用 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

UINavigationBar顺便说一句,来源是对与UIStatusBariOS7的处理相关的各种信息的非常好的参考。

于 2013-09-23T11:36:13.087 回答