如何更改iOS 7中的状态栏文字颜色
我的应用程序有一个黑暗的背景,但在iOS 7状态栏变得透明。 所以我什么都看不到,只有angular落里的绿色电池指示灯。 如何将状态栏文本颜色更改为白色,就像在主屏幕上一样?
-
在.plist文件中将
UIViewControllerBasedStatusBarAppearance
设置为YES
。 -
在
viewDidLoad
做一个[self setNeedsStatusBarAppearanceUpdate];
-
添加以下方法:
- (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; }
注意 :这不适用于UINavigationController
内的控制器,请参阅下面的Tyson评论 🙂
Swift 3 – 这将工作在UINavigationController
内的控制器。 在你的控制器中添加这个代码。
// Preferred status bar style lightContent to use on dark background. // Swift 3 override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
或者,您可以select退出基于视图控制器的状态栏外观:
- 在
Info.plist
中将View controller-based status bar appearance
为NO
。 - 调用
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
注意:此方法在iOS9中已被弃用。 改为使用UIViewController上的preferredStatusBarStyle
。 (请参阅Apple开发者库 )
你可以在不写任何代码的情况下做到这一点!
通过整个应用程序执行以下操作使状态栏文本颜色变为白色
对你项目plist文件:
- 状态栏风格:
Transparent black style (alpha of 0.5)
- 查看基于控制器的状态栏外观:
NO
- 状态栏最初是隐藏的:
NO
注意:大多数upvoted的答案不适用于iOS 7/8
在Info.plist中将“基于视图控制器的状态栏外观”设置为NO
在AppDelegate中添加
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
至
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ ...... ... }
此解决scheme适用于iOS 7/8
对于我来说,在其他答案(以及其他来源/文档)中使用所有的东西并没有什么事情发生。 有帮助的是在XIB中将导航栏样式设置为“黑色”。 这改变了文本为白色,没有任何代码。
这些都不是我的工作,所以这里是一个工作的解决scheme…
在Info.plist
,添加一行:
UIViewControllerBasedStatusBarAppearance
,并设置值NO
。
然后在didFinishLaunchingWithOptions
AppDelegate中添加这些行:
[application setStatusBarHidden:NO]; [application setStatusBarStyle:UIStatusBarStyleLightContent];
你不需要为此做任何代码
您需要在info.plist中添加“基于控制器的状态栏外观”button,如下所示:
并将其值types设置为布尔&值为NO。 然后点击项目设置,然后点击常规选项卡并在部署信息下将首选状态栏样式设置为.Light,如下所示:
而已。
只有两个步骤如下:
步骤1:
在project target
的“信息”选项卡下,添加行:
UIViewControllerBasedStatusBarAppearance
,设置值NO
。
第2步:
在项目AppDelegate.m
:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ … [application setStatusBarStyle:UIStatusBarStyleLightContent]; … }
这在2013年9月18日发布的Golden Master iOS 7和Xcode 5 GM种子和iOS7 SDK(至less在隐藏导航控制器的情况下)可用:
-
在
Info.plist
the UIViewControllerBasedStatusBarAppearance
设置为NO
。 -
在
ViewDidLoad
方法或任何地方,你想改变状态栏的样式:[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
如果你的UIViewController在UINavigationController里面,你将不得不设置BarStyle:
-[UINavigationBar setBarStyle:UIBarStyleBlack]
原答复在这里
如果您有通过Interface Builder创build的embedded式导航控制器,请务必在pipe理您的导航控制器的类中设置以下内容:
-(UIStatusBarStyle)preferredStatusBarStyle{ return UIStatusBarStyleLightContent; }
这应该是你需要的一切。
我正在Swift项目上使用Xcode 6 beta 5,用于iOS 7应用程序。
这是我做的,它的工作原理:
info.plist中:
在AppDelegate.m中,添加以下内容。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; }
在Plist文件中,将“基于控制器的状态栏外观”设置为NO。
只需在Appdelegate
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
那么,这对我来说真的很像一块蛋糕。
转到您应用的info.plist
。
- 将
View controller-based status bar appearance
为NO
- 将
Status bar style
UIStatusBarStyleLightContent
为UIStatusBarStyleLightContent
然后去你的应用程序的委托,并粘贴在你设置你的Windows的RootViewController的以下代码。
#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]; }
答对了。 它为我工作。
-
转到
Project
– >Target
, -
然后将
Status Bar Style
设置为Light
。 它使状态栏从启动屏幕变成白色。 -
然后在
Info.plist
中将View controller-based status bar appearance
为NO
。
iOS 7允许单独的视图控制器确定状态栏的外观,如Apple开发者文档所述:
iOS 7使得视图控制器能够在应用程序运行时调整状态栏的风格。 dynamic更改状态栏样式的一个好方法是实现
preferredStatusBarStyle
并在animation块内更新状态栏外观并调用setNeedsStatusBarAppearanceUpdate
。
全局设置状态栏外观是一个两步过程。
首先,你需要告诉iOS你不想在一个视图的基础上设置状态栏的外观。
那么你需要负责,实际设置新的全局状态栏的风格。
要禁用视图状态栏控件,您需要在Info.plist
设置基于View controller-based status bar appearance
属性。
打开Project Navigator并selectiOS应用程序的项目,然后selectInfo选项卡。
将鼠标hover在一行上,然后单击出现的加号,将新属性添加到您的.plist
。
在Key字段中inputView controller-based status bar appearance
,然后确保Type字段设置为Boolean
。 最后,在“值”字段中input“ NO
”。
要为状态栏设置全局样式,请在“信息”选项卡下添加另一个属性,使用Status bar style
,“ String
types”和“ Opaque black style
值”的键。
这里有一个更详细的一些博客文章和一些示例代码:
http://codebleep.com/setting-the-status-bar-text-color-in-ios-7/
为Xcode GM种子更新的答案:
-
在
Info.plist
将View controller-based status bar appearance
为NO
-
在该项目中,设置:
-
在ViewDidLoad中:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
在Swift 3中很简单,只需2步。 转到您的info.plist并将View controller-based status bar appearance
更改为“NO”。 然后在Appdelegate中,只需在didfinishlaunchingwithoptions方法中添加此行即可
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. UIApplication.shared.statusBarStyle = .lightContent return true }
没有必要做一些额外的事情,只需在你的viewController中写下这个代码,并获得状态栏颜色白色
- (UIStatusBarStyle)preferredStatusBarStyle{return UIStatusBarStyleLightContent;}
我认为所有的答案都没有真正指出问题,因为他们都在特定的情况下工作。 但是,如果您需要涵盖所有情况,请遵循以下几点:
根据你所需要的状态栏的灯光风格,你应该始终牢记这三点:
1)如果你需要启动屏幕或其他地方的状态栏,在那里你不能控制它(不是在视图控制器,而是像启动屏幕一些系统控制的元素/时刻),你去你的项目设置
2)如果导航控制器内有控制器您可以在界面构build器中更改它,如下所示:
a)select导航控制器的导航栏
b)然后将导航栏的样式设置为“黑色”,因为这意味着您的状态栏下会出现“黑色” – >黑色背景,因此会将状态栏设置为白色
或者在代码中做如下
navigationController?.navigationBar.barStyle = UIBarStyle.Black
3)如果你只有控制器需要它自己的状态栏风格,并没有embedded到一些容器结构作为UINavigationController
在代码中为控制器设置状态栏样式:
只需打电话
[[UINavigationBar appearance] setBarStyle:UIBarStyleBlack];
在里面
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { }
我的AppDelegate
方法在iOS7中非常适合我。
这在iOS 7 UI过渡指南中有logging ,您需要Apple开发人员ID才能直接访问。 相关摘录:
因为状态栏是透明的,所以它后面的视图显示出来。 […]使用
UIStatusBarStyle
常量来指定状态栏内容是否应该暗或亮:
UIStatusBarStyleDefault
显示黑暗的内容。 […]
UIStatusBarStyleLightContent
显示灯光内容。 当黑暗的内容在状态栏后面时使用。
也可能感兴趣:
在iOS 7中,您可以从单独的vew控制器控制状态栏的样式,并在应用程序运行时对其进行更改。 要select此行为,请将
UIViewControllerBasedStatusBarAppearance
键添加到应用程序的Info.plist
文件中,并将值YES
。
我肯定会推荐浏览一下这个文档,同样,你可以使用你的Apple开发者ID来访问它。
如果你想要与Swift相同的结果,你可以在你的AppDelegate.swift文件中使用这个代码:
UINavigationBar.appearance().barStyle = .BlackTranslucent
而你的状态栏的文本将是白色的:-)!
我做了一些不同的事情,这对我有用。
在代码中没有改变,我没有configuration我的.plist文件,如下所示:
- 查看基于控制器的状态栏外观> NO
- 状态栏样式> UIStatusBarStyleLightContent(简单string)
我希望它有帮助。
编辑
对于每个视图控制器,我将故事板中的“状态栏”的Simulated Metrics属性从“推断”更改为“Light Content”
在info.plist中设置字段值NO在目标>常规设置中查看基于控制器的状态栏外观并设置状态栏样式灯。
让我给你一个完整的答案你的问题。 更改状态栏的文字颜色是非常容易的,但在iOS 7中有点混乱,特别是新手。
如果您试图通过select视图控制器并转到右侧的模拟度量标准,在故事板中将颜色从黑色更改为白色,则无法正常工作,我不知道为什么。 它应该像这样改变,但是如何改变。
其次,你不会在你的plist中findUIViewControllerBasedStatusBarAppearance属性,但默认情况下它不在那里。 您必须通过点击+button来添加它,然后将其设置为NO。
ios 7状态栏文字颜色
最后,你必须去你的AppDelegate.m文件,并在didFinishLaunchingWithOptions方法中添加以下内容,添加以下行:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
这会将所有视图控制器的颜色更改为白色。 希望这可以帮助!
如果您仍然希望在info.plist中将View controller-based status bar appearance
设置为YES,这意味着您可以更改每个视图控制器的状态栏,请在ViewDidLoad的状态栏中使用以下白色文本:
[[[self navigationController] navigationBar] setBarStyle:UIBarStyleBlackTranslucent];
总结一下,编辑你的项目Info.plist
并添加:
View controller-based status bar appearance
: NO
Status bar style
: Opaque black style
或者如果你有原始的键/值plist
UIViewControllerBasedStatusBarAppearance
: NO
UIStatusBarStyle
: Opaque black style
使这项工作的关键是只有全屏视图控制器才能指定状态栏的样式。
如果您使用的是导航控制器,并且想要以每个视图控制器为基础控制状态栏,那么您需要inheritanceUINavigationController并实现preferredStatusBarStyle,以便返回topViewController的首选项。
确保将你的故事板场景中的类引用从UINavigationController更改为你的子类(例如下面的示例中的MyNavigationController)。
(下面的例子适用于我,如果你的应用程序是基于TabBar的,你可能想通过inheritanceUITabBarController来做类似的事情,但是我没有试过)。
@interface MyNavigationController : UINavigationController @end @implementation MyNavigationController - (UIStatusBarStyle)preferredStatusBarStyle { return self.topViewController.preferredStatusBarStyle; } @end