iOS7导航栏+状态栏文本颜色

时间:2014-01-29 13:32:43

标签: ios cocoa ios7 ios7-statusbar

我在状态栏中遇到文本颜色问题。我想让文字颜色变白,但在模态视图上保持黑色。

我有下一个配置:

  • 故事板设置“在5.1中打开”和“项目部署目标7.0”和“以iOS7及更高版本查看”
  • UITabBarViewController
  • 4 UINavigationControllers
  • 每个导航控制器都有<{li}内的UIViewController自定义子类

UINavigationBar的背景颜色通过appearance设置为暗。

View controller-based status bar appearance设置为YES

我的UITabBarViewController的子类有下一个方法:

- (UIStatusBarStyle)preferredStatusBarStyle {
    return UIStatusBarStyleLightContent;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    [self setNeedsStatusBarAppearanceUpdate];
}

在应用程序启动后调用这些方法。

我的UIViewControllers子类中也有相同的方法调用:

- (UIStatusBarStyle)preferredStatusBarStyle {
    return UIStatusBarStyleLightContent; // This method never called
}

- (void)viewDidLoad {
    [super viewDidLoad];
    [self setNeedsStatusBarAppearanceUpdate];
}

我还尝试将-preferredStatusBarStyle的返回值更改为UIStatusBarStyleDefault(好吧,我知道它应该用黑色绘制文字,但无论如何我都试过了)

将状态栏选项设置为Storyboard中的Light Content相同。也行不通。

我知道有很多关于SO的问题与我的相似,但提议的解决方案对我的情况没有帮助。

我的状态栏仍然如下:

StatusBar

我想将其颜色更改为白色= /

3 个答案:

答案 0 :(得分:4)

这是我在与这个问题斗争了大约2周后偶尔发现的一项工作。

// This is a workaround just enables white text colour in status bar in iOS7, iOS7.1
// Dont touch it until things break
// Despite this category says "draw white", colour automatically becomes black on white background w/o additional code
@interface UINavigationController (StatusBarStyle)

@end

@implementation UINavigationController (StatusBarStyle)
- (UIStatusBarStyle)preferredStatusBarStyle {
    return UIStatusBarStyleLightContent;
}
@end
// Place at the bottom of your AppDelegate.m
// Magic!

我要感谢那些回答这个问题的人,但我已经尝试过这些解决方案并且他们没有帮助:( UINavigationController上的这个类别正常工作。

答案 1 :(得分:2)

首先,您要说- (UIStatusBarStyle)preferredStatusBarStyle子类中永远不会调用UIViewController。这是正常的。您的根视图控制器将调用此方法。在您的情况下,它是UITabBarViewController

你还说你曾试过set Status Bar option to Light Content in Storyboard。仔细观察,您应该在名为Simulated metrics的部分中完成此操作。正如标题所示,这里的修改是模拟的......

我建议您尝试在Info.plist中添加密钥UIViewControllerBasedStatusBarAppearance并将其设置为YES。

答案 2 :(得分:0)

您需要在RootViewController中设置它:

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];