基于不同的ViewController,在iOS 7中设置灯光状态栏文字颜色的正确方法

我需要让一个嵌入在UINavigationController中的特定ViewController具有灯状态栏的文本颜色(但其他ViewController的行为方式不同).我知道至少有3种方法,但是在我的情况下都不行.

> How to change Status Bar text color in iOS 7,方法主要是:

>在plist中将UIViewControllerBasedStatusBarappearance设置为YES
>在viewDidLoad中做一个[self setNeedsstatusBarappearanceUpdate];
>添加以下方法

- (UIStatusBarStyle)preferredStatusBarStyle{ 
      return UIStatusBarStyleLightContent; 
  }

在iOS 7.0.3上运行,这种方法对我来说不起作用,因为即使我已经正确地实现了所有3个步骤,preferredStatusBarStyle也不会被调用.
> UIStatusBarStyle PreferredStatusBarStyle does not work on iOS 7,方法主要有:

将您的导航栏的barStyle设置为UIBarStyleBlackTranslucent将给出白色状态栏文本(即UIStatusBarStyleLightContent),UIBarStyleDefault将给出黑色状态栏文本(即UIStatusBarStyleDefault).

这种方法在iPhone上运行平稳,但不在iPad上.
>将UIViewControllerBasedStatusBar外观设置为pl,然后使用

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

这显然不适用于这种情况,因为我需要为两个ViewController指定不同的状态栏颜色.

感谢所有帮助!

解决方法

对于有UINavigationController的这个问题的人,我可以建议创建一个自定义的UINavigationController并在其上实现preferredStatusBarStyle:
- (UIStatusBarStyle)preferredStatusBarStyle
{
    return [self.topViewController preferredStatusBarStyle];
}

这样,状态栏样式将是顶视图控制器的.现在你可以实现视图控制器的preferredStatusBarStyle,无论如何你喜欢.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...