我的应用程序背景颜色是黑色。由于在 iOS 7 上整个视图都在状态栏下方,因此状态栏上的内容很难辨别。那么如何将状态栏的内容颜色更改为白色呢?
我尝试了preferredStatusBarStyle
和其他几种方法,但没有成功。
我的应用程序背景颜色是黑色。由于在 iOS 7 上整个视图都在状态栏下方,因此状态栏上的内容很难辨别。那么如何将状态栏的内容颜色更改为白色呢?
我尝试了preferredStatusBarStyle
和其他几种方法,但没有成功。
在你的代码中插入:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[UIApplication sharedApplication] setStatusBarHidden:NO];
return YES;
}
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
在 AppDelegate.m 文件的 -application:didFinishLaunchingWithOptions:
方法中,可以设置状态栏的样式。默认情况下,状态栏的样式为 UIStatusBarStyleDefault
,将显示黑色内容。iOS 7.0 中已经弃用了 UIStatusBarStyleBlackTranslucent
和 UIStatusBarStyleBlackOpaque
。
如@ZakariaDarwish所述,方法-setStatusBarStyle
在 iOS 9 中已经被弃用(注意:原问题是很久以前针对 iOS 7 提出的,现在不再支持,下面的新解决方案适用于我在 iOS 9 下的情况)。
因此,(至少目前)唯一的方法是在视图控制器中实现 -preferredStatusBarStyle
方法(记得将“基于视图控制器的状态栏外观”设置为 YES)。
可以在 -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);
}
现在针对此更新的解决方案。
在你的 *-Info.plist 文件中:
或者您可以在目标的 General 标签中指定状态栏样式为“Black Opaque”或“Black Translucent”。(在 Xcode 5.0.1 中)但它们已经过时了。
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
这里有一个简单的方法来设置状态栏颜色为白色
1)首先将这一行View controller-based status bar appearance
复制到你的.plist文件中,并将布尔值设为NO
;
2)在你的AppDelegate.m文件中,在didFinishLaunchingWithOptions下粘贴以下内容:
[[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
}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
UIApplication.shared.statusBarStyle = .lightContent
return true
}
如果您的应用程序使用默认的基于UIViewController的状态栏系统,则设置statusBarStyle不起作用。
在您的info.list文件中将“View controller-based status bar appearance”设置为“NO”
注意,如果你正在使用UINavigationController,你可以将以下代码放入视图控制器的viewDidLoad
方法中:
self.navigationController.navigationBar.barStyle = UIStatusBarStyleLightContent;
barStyle
是 UIBarStyle
类型,它没有 UIStatusBarStyleLightContent
。 - Zorayr如果要在 Swift 3 中以编程方式实现它,请在视图控制器中尝试以下内容。
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
我还将plist键“View controller-based status bar appearance”设置为YES。
application:didFinishLaunchingWithOptions
方法,因此这将不会更改启动屏幕上状态栏的颜色。 - SimplGy