如何在iOS 7上将状态栏的内容颜色设置为白色
我的应用程序的背景颜色是黑色的。 导致整个视图在iOS 7的状态栏下方,状态栏上的内容将难以区分。 那么如何将状态栏的内容颜色更改为白色呢?
我尝试了preferredStatusBarStyle
和其他几种方法,但失败了。
- 在你的info.list文件中将 “基于视图控制器的状态栏外观”设置为NO ;
-
插
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
对
-application:didFinishLaunchingWithOptions:
:。
注意 : UIStatusBarStyleDefault
是状态栏样式的默认值,它将显示黑色内容。 UIStatusBarStyleBlackTranslucent
和UIStatusBarStyleBlackOpaque
都在iOS 7.0中被弃用。
更新为iOS 9:
作为@ZakariaDarwish提到,在iOS 9中已经废弃了-setStatusBarStyle
方法。(注意:原来的问题很早以前就被问到了iOS 7,现在我不支持它,下面的新解决scheme适用于iOS 9下的我,因此在这里更新。)
所以,唯一的办法就是在你的视图控制器中实现-preferredStatusBarStyle
(记得把“基于视图控制器的状态栏外观”设置回YES )。
一旦在-preferredStatusBarStyle
或-prefersStatusBarHidden
更改了值,就可以调用UIViewController的实例方法-prefersStatusBarHidden
。
还有两个方法-childViewControllerForStatusBarStyle
& -childViewControllerForStatusBarHidden
可以根据需要从子视图控制器返回首选样式。
例如 ,如果你使用下面的方法
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault animated:YES]; [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
在切换状态栏的样式之前,可以使用下面的代码示例
- (void)shouldChangeStatusBarStyleToLightContent:(BOOL)toLightContent animated:(BOOL)animated { _shouldChangeStatusBarStyleToLightContent = toLightContent; if (animated) { [UIView animateWithDuration:.3f animations:^{ [self setNeedsStatusBarAppearanceUpdate]; }]; } else { [self setNeedsStatusBarAppearanceUpdate]; } } - (UIStatusBarStyle)preferredStatusBarStyle { return (_shouldChangeStatusBarStyleToLightContent ? UIStatusBarStyleLightContent : UIStatusBarStyleDefault); }
现在更新这个解决scheme。
在你的* -Info.plist文件中:
- 将“查看基于控制器的状态栏外观”设置为NO
- 将“状态栏样式”设置为UIStatusBarStyleLightContent
另外,你可以在Target的General选项卡中指定状态栏的样式为“Black Opaque”或“Black Translucent”(在Xcode 5.0.1中),但是它们已经过时了。
我在主控制器中使用这个:
- (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; }
将这两个键放在info.plist中
这里简短的解决scheme设置状态栏的颜色为白色
1)首先复制这一行在你的.plist文件中View controller-based status bar appearance
并设置布尔NO
;
2)在didFinishLaunchingWithOptions下的AppDelegate.m文件中粘贴这个
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES]; [[UIApplication sharedApplication] setStatusBarHidden:NO];
或者添加.plist
iOS 9(不build议使用的警告解决方法)
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
#ifdef __IPHONE_7_0 # define STATUS_STYLE UIStatusBarStyleLightContent #else # define STATUS_STYLE UIStatusBarStyleBlackTranslucent #endif [[UIApplication sharedApplication] setStatusBarStyle:STATUS_STYLE animated:YES];
只是一个说明,因为这是在那里。 如果您使用的是UINavigationController,则可以将其引入视图控制器的viewDidLoad
方法中:
self.navigationController.navigationBar.barStyle = UIStatusBarStyleLightContent;
如果您的应用程序具有不同的状态栏的每个视图控制器的内容颜色,首选的方法将实施
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
如果您需要在整个应用程序中全局更改栏的内容颜色,请在AppDelegate中的didFinishLaunchingWithOptions方法中添加以下代码行
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { UIApplication.shared.statusBarStyle = .lightContent return true }
如果你的应用程序使用默认的基于UIViewController的状态栏系统,等待设置statusBarStyle什么也不做。 为了这
在你的info.list文件中将“基于视图控制器的状态栏外观”设置为NO
要在Swift 3中以编程方式执行此操作,请在视图控制器中的任何位置尝试。
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
我还将plist键“查看基于控制器的状态栏外观”设置为YES。