UIApplication.statusBarStyle在viewWillAppear和viewDidAppear之间变化

在最初devise用于以前版本的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。

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

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

选项1:

1)如果你的应用程序是基于视图控制器的,那么你必须像这样设置它的app.plist文件:

  UIViewControllerBasedStatusBarAppearance=NO; 

在这里输入图像说明

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

  -(UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; } 

选项2:

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

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

可能会有帮助。

我希望它能帮助你,请在你的.m文件中试试

  - (void)navigationController:(UINavigationController *) navigationController willShowViewController:(UIViewController *) viewController animated:(BOOL)animated { [[UIApplication sharedApplication] setStatusBarHidden:YES]; }