【发布时间】:2013-09-28 00:46:31
【问题描述】:
我的应用程序的背景颜色是黑色。由于 iOS 7 上整个视图都在状态栏下方,因此很难区分状态栏上的内容。那么如何将状态栏的内容颜色改为白色呢?
我尝试了preferredStatusBarStyle 和其他几种方法,但都失败了。
【问题讨论】:
标签: ios cocoa-touch uikit ios7
我的应用程序的背景颜色是黑色。由于 iOS 7 上整个视图都在状态栏下方,因此很难区分状态栏上的内容。那么如何将状态栏的内容颜色改为白色呢?
我尝试了preferredStatusBarStyle 和其他几种方法,但都失败了。
【问题讨论】:
标签: ios cocoa-touch uikit ios7
插入
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
致 AppDelegate.m 的 -application:didFinishLaunchingWithOptions:。
注意:UIStatusBarStyleDefault 是状态栏样式的默认值,它会显示黑色内容。在 iOS 7.0 中,UIStatusBarStyleBlackTranslucent 和 UIStatusBarStyleBlackOpaque 都已弃用。
正如@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 在应用程序加载之前不会被调用,这将不会改变启动屏幕上状态栏的颜色。
在您的 *-Info.plist 文件中:
或者,您可以在目标的常规选项卡中将状态栏样式指定为“黑色不透明”或“黑色半透明”。(在 Xcode 5.0.1 中)但它们是过时的值。
【讨论】:
我在主控制器中使用它:
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
【讨论】:
这里是设置状态栏颜色白色的简短解决方案
1) 首先将此行View controller-based status bar appearance 复制到您的.plist 文件中并设置布尔值NO;
2) 在 didFinishLaunchingWithOptions 下的 AppDelegate.m 文件中粘贴此
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
[[UIApplication sharedApplication] setStatusBarHidden:NO];
或添加 .plist
【讨论】:
iOS 9(已弃用的警告解决方法)
[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];
【讨论】:
如果您的应用程序的每个视图控制器的状态栏内容颜色不同,则首选方法将是实现
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
【讨论】:
只是一个注释,因为它在那里。如果您使用的是 UINavigationController,则可以将其放入视图控制器 viewDidLoad 方法中:
self.navigationController.navigationBar.barStyle = UIStatusBarStyleLightContent;
【讨论】:
barStyle 是 UIBarStyle 类型,它没有 UIStatusBarStyleLightContent。
要在 Swift 3 中以编程方式执行此操作,请在视图控制器中的任何位置尝试此操作。
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
我还将 plist 键“查看基于控制器的状态栏外观”设置为 YES。
【讨论】: