How to change Status Bar text color in iOS
我的应用程序背景很暗,但在iOS 7中,状态栏变得透明。所以我看不到任何东西,只有角落里的绿色电池指示灯。如何将状态栏文本颜色更改为白色,就像在主屏幕上一样?
在.plist文件中将
在
添加以下方法:
1 2 3 4 | - (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; } |
注:这不适用于
Swift 3-这将在
1 2 3 4 5 | // Preferred status bar style lightContent to use on dark background. // Swift 3 override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent } |
或者,您可以选择退出基于视图控制器的状态栏外观:
注意:此方法在IOS9中已被弃用。在uiviewcontroller上使用
您可以在不编写任何代码行的情况下执行此操作!< BR>执行以下操作,使整个应用程序的状态栏文本为白色
在您的项目plist文件上:
- 状态栏样式:
Transparent black style (alpha of 0.5) 。 - 基于视图控制器的状态栏外观:
NO 。 - 状态栏最初隐藏:
NO 。
注:大多数赞成的答案不适用于iOS 7/8
在info.plist中,将"基于视图控制器的状态栏外观"设置为"否"
在AppDelegate中添加
1 | [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; |
到
1 2 3 4 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ ...... ... } |
此解决方案适用于iOS 7/8
对我来说,使用其他答案中的所有内容(以及其他来源/文档中的所有内容)并没有发生任何问题。帮助的是在XIB中将导航栏样式设置为"黑色"。这使得文本变为白色,根本没有任何代码。
这些都不适合我,所以这里有一个可行的解决方案…
在
然后在
1 2 | [application setStatusBarHidden:NO]; [application setStatusBarStyle:UIStatusBarStyleLightContent]; |
你不需要为此做任何代码
您需要在info.plist中添加"基于视图控制器的状态栏外观"键,如下所示:。
&将其值类型设置为"布尔值"并将其值设置为"否"。然后单击"项目设置",然后单击"常规"选项卡&;在"部署信息"下,将首选状态栏样式设置为.light,如下所示:
就是这样。
只需以下两步:
步骤1:
在
步骤2:
在项目
1 2 3 4 5 6 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ … [application setStatusBarStyle:UIStatusBarStyleLightContent]; … } |
这在2013年9月18日发布的golden master ios 7和xcode 5 gm seed和ios7 sdk中工作(至少隐藏导航控制器):
将中的
在
如果uiviewController位于uinavigationController内,则必须设置条形图样式:
1 | -[UINavigationBar setBarStyle:UIBarStyleBlack] |
原始答案在这里
https://devforums.apple.com/message/844264 844264
如果您有通过Interface Builder创建的嵌入式导航控制器,请确保在管理导航控制器的类中设置以下内容:
1 2 3 | -(UIStatusBarStyle)preferredStatusBarStyle{ return UIStatusBarStyleLightContent; } |
这就是你所需要的。
我在一个Swift项目中使用Xcode6测试版5,用于iOS 7应用程序。
以下是我所做的,它起作用:
幻灯片:
在appdelegate.m中,添加以下内容。
1 2 3 4 5 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; } |
在plist文件中,将"基于视图控制器的状态栏外观"设置为"否"。
仅在AppDelegate中
1 | [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; |
去
然后将
然后将
好吧,这对我来说真的是小菜一碟。
去你的应用程序的
然后转到应用程序的代理并粘贴以下代码,在其中设置Windows的rootviewcontroller。
1 2 3 4 5 6 7 8 | #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) { UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0,320, 20)]; view.backgroundColor=[UIColor colorWithRed:0/255.0 green:0/255.0 blue:0/255.0 alpha:1.0]; [self.window.rootViewController.view addSubview:view]; } |
答对了。这对我很有效。
在Swift 3中,只需两步就可以轻松完成。转到info.plist,将键
1 2 3 4 5 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. UIApplication.shared.statusBarStyle = .lightContent return true } |
IOS9中已弃用此属性,现在应该在rootviewController中重写此属性。
在iOS 9中不推荐这样做,应该在rootviewcontroller上这样做。
1 2 3 | override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent } |
iOS 7允许单个视图控制器确定状态栏的外观,如Apple Developer文档所述:
iOS 7 gives view controllers the ability to adjust the style of the status bar while the app is running. A good way to change the status bar style dynamically is to implement
preferredStatusBarStyle and—within an animation block—update the status bar appearance and callsetNeedsStatusBarAppearanceUpdate .
全局设置状态栏外观是一个两步过程。
首先,您需要告诉iOS您不想按视图设置状态栏外观。
然后您需要负责并实际设置新的全局状态栏样式。
要禁用"按视图查看"状态栏控件,需要在
打开"项目导航器",选择iOS应用程序的项目,然后选择"信息"选项卡。
将鼠标悬停在一行上,然后单击出现的加号,将新属性添加到您的
在键字段中输入
要为状态栏设置全局样式,请在"信息"选项卡下添加另一个属性,其键为
下面是一篇博文,其中包含了更多的细节和一些示例代码:
http://codebleep.com/setting-the-status-bar-text-color-in-ios-7/
更新了xcode gm seed的答案:
在
在项目中,设置:
在ViewDidLoad:
不需要做额外的工作,只需在视图控制器中编写此代码,并使状态栏颜色为白色。
1 | - (UIStatusBarStyle)preferredStatusBarStyle{return UIStatusBarStyleLightContent;} |
我认为所有的答案并不能真正指出问题所在,因为它们都适用于特定的场景。但如果您需要涵盖所有案例,请遵循以下要点:
根据您需要的状态栏灯光样式,您应该始终记住以下三点:
1)如果您需要启动屏幕或其他无法控制的地方的状态栏(不是在视图控制器中,而是一些系统控制的元素/时刻,如启动屏幕)转到项目设置
2)如果导航控制器内有控制器您可以在Interface Builder中更改它,如下所示:
a)选择导航控制器的导航栏
b)然后将导航栏的样式设置为"黑色",因为这意味着您的状态栏下将有一个"黑色"->深色背景,因此它将状态栏设置为白色。
或者用下面的代码来做
1 | navigationController?.navigationBar.barStyle = UIBarStyle.Black |
3)如果只有控制器需要有它自己的状态栏样式,并且它没有作为uinavigationcontroller嵌入到某些容器结构中
在代码中为控制器设置状态栏样式:
简单呼叫
1 | [[UINavigationBar appearance] setBarStyle:UIBarStyleBlack]; |
在
1 2 3 | -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { } |
我的
这在iOS 7用户界面过渡指南中有记录,您需要一个Apple开发人员ID才能直接访问该指南。相关摘录:
Because the status bar is transparent, the view behind it shows through. [...] Use a
UIStatusBarStyle constant to specify whether the statusbar content should be dark or light:
UIStatusBarStyleDefault displays dark content. [...]
UIStatusBarStyleLightContent displays light content. Use when dark content is behind the status bar.
也可能感兴趣:
In iOS 7, you can control the style of the status bar from an individual vew controller and change it while the app runs. To opt in to this behavior, add the
UIViewControllerBasedStatusBarAppearance key to an app'sInfo.plist file and give it the valueYES .
我绝对建议您仔细阅读一下该文档,您也可以使用您的Apple开发人员ID访问该文档。
如果您希望使用swift获得相同的结果,可以在appdelegate.swift文件中使用此代码:
1 | UINavigationBar.appearance().barStyle = .BlackTranslucent |
您的状态栏的文本将为白色:—)!
以下是苹果关于状态栏更改的指导方针/说明。状态栏中只允许使用暗灯(而黑灯)。
以下是-如何更改状态栏样式:
如果要设置状态栏样式,则应用程序级别会将.plist文件中的
如果要设置状态栏样式,请在视图控制器级别执行以下步骤:
在viewdidload添加函数-
覆盖视图控制器中的PreferredStatesBarStyle。
-
1 2 3 4 5 6 7 8 | override func viewDidLoad() { super.viewDidLoad() self.setNeedsStatusBarAppearanceUpdate() } override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent } |
根据状态栏样式设置级别设置.plist的值。
以下是一些在应用程序启动或视图控制器加载期间更改/设置状态栏背景色的黑客技巧。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | extension UIApplication { var statusBarView: UIView? { return value(forKey:"statusBar") as? UIView } } // Set upon application launch, if you've application based status bar class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { UIApplication.shared.statusBarView?.backgroundColor = UIColor.red return true } } or // Set it from your view controller if you've view controller based statusbar class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() UIApplication.shared.statusBarView?.backgroundColor = UIColor.red } } |
结果如下:
我做了一些不同的事情,这对我很有用。
在代码没有更改的情况下,我对.plist文件进行了如下配置:
- 基于视图控制器的状态栏外观>否
- 状态栏样式>uistatusbarstylelightcontent(简单字符串)
希望有帮助。
编辑对于每个视图控制器,我在故事板中将"状态栏"的模拟度量属性从"推断"更改为"轻内容"。
如果仍要使用info.plist中的
1 | [[[self navigationController] navigationBar] setBarStyle:UIBarStyleBlackTranslucent]; |
在info.plist中,设置字段值no view controller based status bar appearance,并在Target>General setting中设置statusbar-style-light。
让我给你一个完整的答案。更改状态栏文本颜色非常容易,但在iOS 7中有点混乱,特别是对新手而言。
如果你试图通过选择视图控制器并在右侧使用模拟的度量值来将故事板中的颜色从黑色变为白色,那么它将不起作用,我不知道为什么。它应该像这样改变,但无论如何。
其次,在plist中找不到uiviewControllerBasedStatusParapearance属性,但默认情况下,它不在那里。您必须通过单击+按钮自行添加,然后将其设置为否。
iOS 7状态栏文本颜色
最后,您必须转到appdelegate.m文件,并在didFinishLaunchWithOptions方法中添加以下内容,添加以下行:
1 | [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; |
这会将所有视图控制器的颜色更改为白色。希望这有帮助!
在plist中,添加以下内容:
- 状态栏样式:
UIStatusBarStyleLightContent 。 - 基于视图控制器的状态栏外观:
NO 。
实现这一点的关键是,只有全屏视图控制器GET才能指定状态栏的样式。
如果您使用的是导航控制器,并且希望基于每个视图控制器控制状态栏,那么您将希望子类uinavigationcontroller并实现PreferredStateusBarStyle,以便它返回TopViewController的首选项。
确保将故事板场景中的类引用从uinavigationController更改为子类(例如下面的示例中的myNavigationController)。
(以下对我有效。如果您的应用程序是基于Tabbar的,那么您将希望通过对uitabbarController进行子类化来完成类似的工作,但我没有尝试过)。
1 2 3 4 5 6 7 8 9 10 11 12 | @interface MyNavigationController : UINavigationController @end @implementation MyNavigationController - (UIStatusBarStyle)preferredStatusBarStyle { return self.topViewController.preferredStatusBarStyle; } @end |
总之,编辑您的项目
或者如果您有原始密钥/值plist
对于XCODE 5.1:
将"基于视图控制器的状态栏外观"添加到.plist中的"否"。
在AppDelegate中,添加:
1 | [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; |
这就是全部!
您可以从info.plist执行此操作:
1)"基于视图控制器的状态栏外观"设置为"否"
2)"状态栏样式"设置为"uistatusbarstylelightcontent"
完成
在info.plist中,将"基于视图控制器的状态栏外观"设置为"否"
在AppDelegate中添加
1 | [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; |
Swift 3-Xcode 8.
如果希望状态栏最初隐藏在启动屏幕上,请尝试此操作,
第一步:在
View controller-based status bar appearance 值NO 值Status bar is initially hidden 值YES 值
第二步:用
1 2 | UIApplication.shared.isStatusBarHidden = false UIApplication.shared.statusBarStyle = UIStatusBarStyle.lightContent |
从Xcode(不带任何编码)执行此操作的最简单方法是:
- 将
View controller-based status bar appearance 添加到info.plist中,并将值设置为NO 。 - 现在,转到您的项目目标,在
Deployment Info 中,您将找到Status Bar Style 的选项。将此选项的值设置为Light 。
您将拥有
如果您的应用程序默认需要有
- 在plist中将
UIViewControllerBasedStatusBarAppearance 设置为NO 。 - 将
UIStatusBarStyle 设置为UIStatusBarStyleLightContent
所有视图控制器将使用白色文本作为状态栏。现在只在需要状态栏为黑色文本的视图控制器中添加此方法:
1 2 3 4 5 6 7 8 9 10 11 | -(void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; } -(void)viewWillDisappear:(BOOL)animated { [super viewWillAppear:animated]; [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; } |
在IOS 8中:在
如果我使用uinavigationcontroller,我会在iOS 9和Swift 2.0中进行此操作
1 | self.navigationController?.navigationBar.barStyle = UIBarStyle.Black |
如果我用莫代尔塞格
1 2 3 | override func preferredStatusBarStyle() -> UIStatusBarStyle { return .LightContent } |
这对我很有用:
在
1 | -(UIStatusBarStyle)preferredStatusBarStyle |
因为我的
1 2 3 4 5 6 7 8 9 10 | #import"JASidePanelController+StatusBarStyle.h" @implementation JASidePanelController (StatusBarStyle) - (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; } @end |
删除.plist文件中基于视图控制器的状态栏外观(如果已创建),然后重新创建它。
将状态栏样式设置为不透明黑色样式
在AppDelegate中,在DidFinishLaunching下添加以下代码。
1 | [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; |
只需更改1)基于
1 2 | [[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent]; |
在里面
1 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions |
更改所有视图控制器的状态栏文本颜色
斯威夫特3
如果在info.plist中,基于视图控制器的状态栏外观=是
然后将此扩展用于所有导航控制器
1 2 3 4 5 6 | extension UINavigationController { override open var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent } } |
如果没有uinavigationcontroller并且只有uiviewcontroller,则使用以下代码:
1 2 3 4 5 6 | extension UIViewController { override open var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent } } |
目标C
创建类别类
对于uiviewcontroller
在uiviewcontroller+statusbarstyle.h中
1 2 | @interface UIViewController (StatusBarStyle) @end |
在uiviewcontroller+statusbarstyle.m中
1 2 3 4 5 6 7 8 | #import"UIViewController+StatusBarStyle.h" @implementation UIViewController (StatusBarStyle) -(UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; } @end |
对于uinavigationcontroller
在uinavigationcontroller+statusbarstyle.h中
1 2 | @interface UINavigationController (StatusBarStyle) @end |
在uinavigationcontroller+statusbarstyle.m中
1 2 3 4 5 6 7 8 | #import"UINavigationController+StatusBarStyle.h" @implementation UINavigationController (StatusBarStyle) -(UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; } @end |
这似乎是xcode和ios 7当前版本的一个问题。
苹果开发者论坛上的一些相关内容正在苹果开发者论坛*上的"iOS 7 beta Livability"中搜索uistatusbarStyleLightContent(目前有32篇文章)。
我偶然发现它试图把它设置成轻版本。
(这只是对亚伦回答的后续行动。)
在iOS 7上,如果要使用uiviewControllerBasedStatusBarAppearance==yes,并且根视图控制器是uinavigationController,则应子类化它并重载ChildViewControllerForStatesBarStyle,例如:
1 2 3 4 | - (UIViewController*) childViewControllerForStatusBarStyle { return self.viewControllers.lastObject; } |
在此之后,将在按下的视图控制器上调用PreferredStatesBarStyle。
您可以将其用于iOS 6和7:
1 2 3 4 5 6 7 | #ifdef __IPHONE_7_0 # define STATUS_STYLE UIStatusBarStyleLightContent #else # define STATUS_STYLE UIStatusBarStyleBlackTranslucent #endif [[UIApplication sharedApplication] setStatusBarStyle:STATUS_STYLE animated:YES]; |
请试试这个
1 2 3 4 5 6 7 | [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; [application setStatusBarHidden:NO]; [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"]; if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) { statusBar.backgroundColor = [UIColor blackColor]; } |
如果要将其设置为任何颜色,请使用下面的代码。
1 2 3 4 5 6 7 8 9 | id statusBarWindow = [[UIApplication sharedApplication] valueForKey:@"statusBarWindow"]; id statusBar = [statusBarWindow valueForKey:@"statusBar"]; SEL setForegroundColor_sel = NSSelectorFromString(@"setForegroundColor:"); if([statusBar respondsToSelector:setForegroundColor_sel]) { // iOS 7+ [statusBar performSelector:setForegroundColor_sel withObject:YourColorHere]; ^^^^^^^^^^^^^ } |
我知道我正在访问私有API,但我已经在许多项目中使用了它,并且苹果已经批准了它。
提交应用程序时,请将此代码发送到"评论"部分的Apple,并通知您正在使用此代码更改状态栏的颜色。
是的,不要忘了下面。
我必须为Swift和导航控制器做些什么
1 2 3 4 5 | extension UINavigationController { override open var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent } } |
很容易改变状态栏颜色的方法。创建导航控制器的子类。
在视图didload方法中编写此代码。在所有视图控制器中执行此代码
1 2 3 | self.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName : [UIColor whiteColor], NSFontAttributeName:[UIFont boldSystemFontOfSize:19]}; |