UIApplication.statusBarStyle在viewWillAppear和viewDidAppear之间更改

时间:2013-11-15 11:05:12

标签: ios iphone objective-c statusbar

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

3 个答案:

答案 0 :(得分:8)

选项1:

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

 UIViewControllerBasedStatusBarAppearance=NO;

enter image description here

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

 -(UIStatusBarStyle)preferredStatusBarStyle
  {
      return UIStatusBarStyleLightContent;
  }

选项2:

应用程序didFinishLaunchingWithOptions:method

中的 AppDelegate.m 文件中写下这一行。
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];

可能会有所帮助。

答案 1 :(得分:5)

我认为发生的情况是系统根据视图控制器状态栏外观更新状态栏。这是iOS7的新行为,默认情况下处于启用状态。

如果您想使用以前的API状态栏外观,则应在应用的info.plist中将UIViewControllerBasedStatusBarAppearance设置为NO

答案 2 :(得分:1)

我希望它会对你有所帮助        请在您的.m文件中试用

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

       {
         [[UIApplication sharedApplication] setStatusBarHidden:YES];

      }