如何在 iOS 7 上将状态栏内容颜色设置为白色
Posted
技术标签:
【中文标题】如何在 iOS 7 上将状态栏内容颜色设置为白色【英文标题】:How to set status bar's content color to white on iOS 7 【发布时间】:2013-09-28 00:46:31 【问题描述】:我的应用程序的背景颜色是黑色。由于 ios 7 上整个视图都在状态栏下方,因此很难区分状态栏上的内容。那么如何将状态栏的内容颜色改为白色呢?
我尝试了preferredStatusBarStyle
和其他几种方法,但都失败了。
【问题讨论】:
【参考方案1】:-
在您的 info.list 文件中将“查看基于控制器的状态栏外观”设置为 NO;
插入
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
致 AppDelegate.m 的 -application:didFinishLaunchingWithOptions:
。
注意:UIStatusBarStyleDefault
是状态栏样式的默认值,它会显示黑色内容。在 iOS 7.0 中,UIStatusBarStyleBlackTranslucent
和 UIStatusBarStyleBlackOpaque
都已弃用。
iOS 9 更新:
正如@ZakariaDarwish 提到的,-setStatusBarStyle
方法在 iOS 9 中已弃用。(注意:最初的问题是很久以前针对 iOS 7 提出的,我现在不支持它,下面的新解决方案适用于我在 iOS 9 下,因此在这里更新。)
所以,剩下的唯一方法(至少现在)是在您的视图控制器中实现-preferredStatusBarStyle
(记得将“基于视图控制器的状态栏外观”设置回 是)。
一旦-preferredStatusBarStyle
或-prefersStatusBarHidden
中的值发生更改,您就可以调用UIViewController 的实例方法-setNeedsStatusBarAppearanceUpdate
。
还有两种方法 -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);
现在为这个更新的解决方案。
【讨论】:
仅提示:如果您在 -application:didFinishLaunchingWithOptions: 中设置此项,则可以使用 application 而不是 [UIApplication sharedApplication]: 也适用于 iOS 8.2。 注意:因为application:didFinishLaunchingWithOptions
在应用程序加载之前不会被调用,这将不会改变启动屏幕上状态栏的颜色。
要同时影响启动屏幕,请改用 .plist 方法:***.com/a/18898750/111243【参考方案2】:
在您的 *-Info.plist 文件中:
-
将“基于查看控制器的状态栏外观”设置为 NO
将“状态栏样式”设置为 UIStatusBarStyleLightContent
或者,您可以在目标的常规选项卡中将状态栏样式指定为“黑色不透明”或“黑色半透明”。(在 Xcode 5.0.1 中)但它们是过时的值。
【讨论】:
非常出色,非常感谢。随着 iOS 9.0 中 setStatusBarStyle 的弃用,这绝对是天赐之物。【参考方案3】:我在主控制器中使用它:
- (UIStatusBarStyle)preferredStatusBarStyle
return UIStatusBarStyleLightContent;
【讨论】:
【参考方案4】:将这两个键放在 info.plist
【讨论】:
【参考方案5】:这里是设置状态栏颜色白色的简短解决方案
1) 首先将此行View controller-based status bar appearance
复制到您的.plist 文件中并设置布尔值NO
;
2) 在 didFinishLaunchingWithOptions 下的 AppDelegate.m 文件中粘贴此
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
[[UIApplication sharedApplication] setStatusBarHidden:NO];
或添加 .plist
【讨论】:
【参考方案6】:iOS 9(已弃用的警告解决方法)
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
【讨论】:
【参考方案7】: #ifdef __IPHONE_7_0
# define STATUS_STYLE UIStatusBarStyleLightContent
#else
# define STATUS_STYLE UIStatusBarStyleBlackTranslucent
#endif
[[UIApplication sharedApplication] setStatusBarStyle:STATUS_STYLE animated:YES];
【讨论】:
不过,这只是编译时的决定——而不是运行时的决定。【参考方案8】:如果您的应用程序的每个视图控制器的状态栏内容颜色不同,则首选方法将是实现
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
【讨论】:
【参考方案9】:只是一个注释,因为它在那里。如果您使用的是 UINavigationController,则可以将其放入视图控制器 viewDidLoad
方法中:
self.navigationController.navigationBar.barStyle = UIStatusBarStyleLightContent;
【讨论】:
这是错误的!barStyle
是 UIBarStyle
类型,它没有 UIStatusBarStyleLightContent
。
是的,无论如何它似乎都有效。我知道它在类描述中没有该属性,但无论出于何种原因,它似乎都将 UIBarStyle 转换为 UIStatusBarStyle 。一行代码就可以自己测试了……
@Shawn 这些枚举都是 NSInteger 类型,这就是它不会报错的原因。如果您在构建设置中启用所有警告,则由于类型不匹配,这将成为警告。
@art-divin 你知道为什么即使有警告,它也会按照我的预期用途进行吗?
@shawn 之所以有效,是因为状态栏从 UINavigationBar 继承了一堆设置并进行相应调整。所以状态栏的颜色、透明度、文字和内容都会根据UIBarStyle进行调整。我找到了一个非常好的write up here。【参考方案10】:
要在 Swift 3 中以编程方式执行此操作,请在视图控制器中的任何位置尝试此操作。
override var preferredStatusBarStyle: UIStatusBarStyle
return .lightContent
我还将 plist 键“查看基于控制器的状态栏外观”设置为 YES。
【讨论】:
以上是关于如何在 iOS 7 上将状态栏内容颜色设置为白色的主要内容,如果未能解决你的问题,请参考以下文章
如何在iOS 7上更改状态栏背景颜色和文本颜色? Warif Akhand Rishi