iOS 7及更高版本:设置每个视图控制器的状态栏风格

我尝试了许多方法来设置状态栏样式(默认或lightcontent),但不能让它在每个视图控制器的基础上工作。 我只能设置整个应用程序的状态栏样式。

有没有人有提示?

我试过UIViewControllerBasedStatusBarAppearance

 -(UIStatusBarStyle)preferredStatusBarStyle{ return UIStatusBarStyleLightContent; } 

但是这些方法不起作用。

你尝试过吗?

  1. 在Info.plist中将“基于视图控制器的状态栏外观”( UIViewControllerBasedStatusBarAppearance )设置为YES 。 ( YES是默认的,所以你也可以把这个值从plist中删除。)

  2. 在你的viewDidLoad方法中,调用[self setNeedsStatusBarAppearanceUpdate]

  3. 实现preferredStatusBarStyle ,返回所需的视图控制器的状态栏样式。

     - (UIStatusBarStyle) preferredStatusBarStyle { return UIStatusBarStyleLightContent; } 

如果你的视图控制器是独立的UINavigationController而不是基于Storyboard的UINavigationController的一部分,那么在这里就有一个问题,那么上面所有的方法都会失败。 我遇到了这种情况,然后为了将状态栏设置为我以下使用的灯光风格

 [self.navigationController.navigationBar setBarStyle:UIBarStyleBlack]; 

这对我来说是完美的。

编辑:此解决scheme已被弃用在iOS 9上。请select其他答案之一。

随着UIViewControllerBasedStatusBarAppearance设置为NO,我可以通过使用以下设置样式为白色文本:

 [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleBlackTranslucent; 

这是因为这种风格的文本颜色在iOS 6及更低版本上是白色的。

更新:根据@jowie你可以尝试在iOS8上:

 [UIApplication sharedApplication].statusBarStyle = UIBarStyleBlack; 

在viewDidLoad方法上,把这个:

目标C

 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; [self setNeedsStatusBarAppearanceUpdate]; 

迅速

 UIApplication.shared.statusBarStyle = .lightContent self.setNeedsStatusBarAppearanceUpdate() 

在Swift中,我可以这样写:

 let tbc : UITabBarController = self.window?.rootViewController as UITabBarController var moreViewController : UINavigationController = tbc.moreNavigationController moreViewController.navigationBar.barStyle = UIBarStyle.Black 

基本上你对最后一行感兴趣。
这导致tabbar变成白色:

在这里输入图像说明

请注意,我没有更改Info.plist中的任何内容以实现此结果。
有关更改Navigation Status Bar更多信息,请查看以下链接: http : //www.appcoda.com/customize-navigation-status-bar-ios-7/

我敢打赌,你的视图控制器embedded到导航控制器中。 为了避免设置导航栏的风格。 .Black使用这个子类:

 class YourNavigationController: UINavigationController { override func childViewControllerForStatusBarStyle() -> UIViewController? { return topViewController } } 

迅速:

 let tbc : UITabBarController = self.window?.rootViewController as UITabBarController var moreViewController : UINavigationController = tbc.moreNavigationController moreViewController.navigationBar.barStyle = UIBarStyle.Black 

目标C:

将此附加到controller.m文件的viewDidLoad方法:

 [self setNeedsStatusBarAppearanceUpdate]. 

然后在相同的controller.m文件中实现这个方法:

 - (UIStatusBarStyle) preferredStatusBarStyle { return UIStatusBarStyleLightContent; } 

官方文档:

https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/TransitionGuide/Bars.html

特色文章:

http://www.ryadel.com/2015/03/04/xcode-set-status-bar-style-and-color-in-objective-c/

在你想改变状态栏颜色的ViewController中

 - (void) viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; } - (void) viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; } 

Swift的扩展,因为我总是忘记这是如何工作的

 extension UIViewController { // utility to set the status bar appearance // Note: Make sure "View controller-based status bar appearance" is set to NO in your target settings or this won't work func setStatusBarForDarkBackground(dark: Bool) { UIApplication.sharedApplication().statusBarStyle = dark ? .LightContent : .Default setNeedsStatusBarAppearanceUpdate() } }