4

在最初为以前版本设计的 iOS7 中运行应用程序时,深灰色的导航栏会将文本为黑色的状态栏着色。

我正在尝试将其调整为最新版本,并将 UIApplication.statusBarStyle 设置为 UIStatusBarStyleLightContent ,如下所示:

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];

这段代码应该将状态栏文本颜色更改为白色,但事实并非如此。我在 UIApplication 实例的 _statusBarRequestedStyle 属性中放置了一个观察点,我可以看到在 viewWillAppear 和 viewDidAppear 方法的执行之间来自 UIApplicationMain 的一些调用将其设置为 0 (UIStatusBarStyleDefault)。

我无法弄清楚此时状态栏样式发生了什么/为什么会发生变化,如果您有同样的经历,我将不胜感激。

提前致谢!

编辑:来自 iOS 7 UI 转换指南(https://developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/Bars.html

在 iOS 7 中,您可以从单个视图控制器控制状态栏的样式,并在应用程序运行时更改它。如果您希望退出此行为并使用 UIApplication statusBarStyle 方法设置状态栏样式,请将 UIViewControllerBasedStatusBarAppearance 键添加到应用程序的 Info.plist 文件中,并将其设置为 NO。

4

3 回答 3

8

选项1:

1) 如果您的应用是基于 View 控制器的,那么您必须像这样设置 app.plist 文件:

 UIViewControllerBasedStatusBarAppearance=NO;

在此处输入图像描述

2)您必须在每个控制器中设置此方法:

 -(UIStatusBarStyle)preferredStatusBarStyle
  {
      return UIStatusBarStyleLightContent;
  }

选项 2:

在应用程序 didFinishLaunchingWithOptions: 方法的AppDelegate.m文件中写入这一行

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];

可能会有所帮助。

于 2013-11-15T11:11:43.987 回答
5

我认为系统正在根据视图控制器状态栏的外观更新状态栏。这是 iOS7 的新行为,默认开启。

如果你想使用以前的 API 来显示状态栏,你应该在你的应用程序的 info.plist 中设置UIViewControllerBasedStatusBarAppearance为。NO

于 2013-11-15T11:09:10.183 回答
1

希望对您有所帮助请在您的 .m 文件中尝试

    - (void)navigationController:(UINavigationController *)
       navigationController willShowViewController:(UIViewController *)
       viewController animated:(BOOL)animated

       {
         [[UIApplication sharedApplication] setStatusBarHidden:YES];

      }
于 2013-11-15T11:18:45.330 回答