在iOS 9中使用Objective-C将状态栏文本颜色更改为浅色

155
在iOS 9中,我如何将状态栏文本颜色更改为白色?

不应自定义状态栏。选择可用的状态栏样式之一。当状态栏处于深色背景上时,文本颜色应为白色。 - Teja Nandamuri
请检查我的答案并告诉我评论 @reza_darkman797 - Jay Bhalani
2
在iOS9中,只需要在AppDelegate中添加以下代码即可使其生效:[[UINavigationBar appearance] setBarStyle:UIBarStyleBlack]; - Dimitris
注意 - setStatusBarStyle 在iOS 9上已经被弃用...请使用 preferredStatusBarStyle 代替。 - siege_Perilous
状态栏内容基于导航控制器栏样式。所以你只需要在ViewDidLoad()中添加以下代码即可:[self.navigationController.navigationBar setBarStyle:UIBarStyleBlack]; 默认为黑色,即 [self.navigationController.navigationBar setBarStyle:UIBarStyleDefault]; - Ram Madhavan
6个回答

420

如果您想要从启动画面更改状态栏样式,可以采用以下方法:

  1. 进入 项目 -> 目标,

  2. 状态栏样式 设置为 Light Project Setting

  3. Info.plist 中将 View controller-based status bar appearance 设置为NO


2
在Xcode 7.2中,状态栏样式的下拉菜单不见了。我该在哪里找到它? - Sonic Master
3
@WanbokChoi,这是我的错。如果您将目标设置为仅限于iPad / iPhone而不是通用设备,则该下拉菜单将消失。谢谢。 - Sonic Master
3
对于 iOS 10,您需要在每个 ViewController 中添加以下代码:
  • (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; }
此代码的作用是设置状态栏的样式为浅色内容。
- mwaqas01
2
太棒了!!干杯! - Cruz
1
UIViewControllerBasedStatusBarAppearance 设置为 false 对我来说是缺失的关键 - 谢谢! - sherb
显示剩余7条评论

115

在您的 AppDelegate.m 文件中,使用 UINavigationController 并设置其导航栏的 barStyle.Black

navigationController.navigationBar.barStyle = UIBarStyleBlack;
如果您没有使用UINavigationController,则请在您的ViewController.m文件中添加以下代码。
- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}

并将该方法调用添加到此行:

[self setNeedsStatusBarAppearanceUpdate];

1
很遗憾,不起作用。 - reza_khalafi
你正在使用导航控制器吗?@reza_darkman797 - Jay Bhalani
它与导航栏完美配合,运行良好。 - Aragunz
1
谢谢,这对我有用。 - Fadi Abuzant
1
非常感谢,它运行良好。 - Mehul

42

第一组

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

前往您的AppDelegate,找到它的didFinishLaunchingWithOptions方法,并执行以下操作:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

}

然后在 plist 中将 View controller-based status bar appearance 设置为 NO。


6
将条目添加到属性列表是这个答案最重要的部分,如果没有这一步,你将无法为单个视图设置样式。 - sam_smith
23
在iOS 9中,setStatusBarStyle已经被弃用了... - CodeSmith
4
自从iOS 9开始,这个方法已经被弃用。请改用ViewController方法代替:
  • (UIStatusBarStyle)preferredStatusBarStyle {return UIStatusBarStyleLightContent;}
您还需要在Info.plist中添加此键:“UIViewControllerBasedStatusBarAppearance”。
- Hugo
在Xcode 8-iOS10中成功运行(通过项目属性状态栏:Light和在plist ViewController-based status bar appearance: NO)。完美,谢谢。 - Remco

37
  1. 在你的 info.plist 文件中添加一个key,名称为 UIViewControllerBasedStatusBarAppearance,并将其设置为 YES

  2. 在您的ViewController的viewDidLoad方法中添加一个方法调用:

  3. [self setNeedsStatusBarAppearanceUpdate];
    
    然后将下面的方法粘贴到viewController文件中:
    - (UIStatusBarStyle)preferredStatusBarStyle
    { 
        return UIStatusBarStyleLightContent; 
    }
    

1
这正是我想要的,因为我只想改变那个视图控制器的样式。 - Mr Rogers
1
你也可以在ViewController的.xib文件中设置状态栏样式(即不需要添加preferredStatusBarStyle方法)。 - Chris Allinson
对于UIStatusBarStyleLightContent,您在选择项目后还可以在“常规”选项卡中选择“浅色”。无需编写代码。 - coolcool1994

12

Info.plist文件中添加键View controller-based status bar appearance,将其布尔类型设置为NO

viewDidLoad中插入一行代码(这仅适用于指定的类)。

 [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;

1
statusBarStyle 是只读的:@property(readonly, nonatomic) UIStatusBarStyle statusBarStyle 在iOS9中。而 setStatusBarStyle 已经被弃用。 - zxcat

1

iOS状态栏只有两个选项(黑色和白色)。 你可以在AppDelegate中尝试以下内容:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
    [[UIApplication sharedApplication] setStatusBarStyle: UIStatusBarStyleLightContent];
}

1
'setStatusBarStyle:'已被弃用:自iOS 9.0起首次被废弃 - 请使用-[UIViewController preferredStatusBarStyle] - omega1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接