UIApplication.statusBarStyle 在 vi​​ewWillAppear 和 viewDidAppear 之间变化

Posted

技术标签:

【中文标题】UIApplication.statusBarStyle 在 vi​​ewWillAppear 和 viewDidAppear 之间变化【英文标题】:UIApplication.statusBarStyle changes between viewWillAppear and viewDidAppear 【发布时间】:2013-11-28 18:14:55 【问题描述】:

在最初为早期版本设计的 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。

【问题讨论】:

【参考方案1】:

选项 1:

1) 如果您的应用是基于 View 控制器的,那么您必须将其设置为 app.plist 文件,如下所示:

 UIViewControllerBasedStatusBarAppearance=NO;

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

 -(UIStatusBarStyle)preferredStatusBarStyle
  
      return UIStatusBarStyleLightContent;
  

选项 2:

application didFinishLaunchingWithOptions: 方法中的 AppDelegate.m 文件中写入这一行:方法

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

也许会有帮助。

【讨论】:

这个应用程序的状态栏不是基于视图控制器的,Leo 的回答解决了我的问题。但如果应用程序必须基于 View 控制器,这很有意义。谢谢。【参考方案2】:

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

如果您想使用之前的 API 来显示状态栏,您应该在应用的 info.plist 中将 UIViewControllerBasedStatusBarAppearance 设置为 NO

【讨论】:

【参考方案3】:

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

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

       
         [[UIApplication sharedApplication] setStatusBarHidden:YES];

      

【讨论】:

以上是关于UIApplication.statusBarStyle 在 vi​​ewWillAppear 和 viewDidAppear 之间变化的主要内容,如果未能解决你的问题,请参考以下文章