如何使用swift在一个视图控制器中更改状态栏颜色?

UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true) 

我使用这个在所有应用程序中将状态栏更改为亮。 但现在我需要在一个View Controller中将其更改为黑色。 我怎样才能做到这一点?

将project.plist中View controller-based status bar appearance设置为NO

使用viewWillAppear并将viewWillDisappear设置和重置statusBarStyle,同时保持一个属性与之前的statusBarStyle一样

 let initialStatusBarStyle : UIStatusBarStyle func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) initialStatusBarStyle = UIApplication.sharedApplication().statusBarStyle UIApplication.sharedApplication().setStatusBarStyle(.LightContent, animated: animated) } func viewWillDisappear(animated: Bool) { super.viewWillDisappear(animated) UIApplication.sharedApplication().setStatusBarStyle(initialStatusBarStyle, animated: animated) } 

Xcode 8.1,带有@IBDesignable的Swift 3解决方案

这个解决方案有点不同:

  • UIViewController的子类集中逻辑
  • 没有viewDidLoad或viewDidDisappear的代码
  • 使用@IBDesignable,以便您可以在故事板上的“属性”检查器中设置状态栏颜色

第1步 – 设置Info.plist文件

的Info.plist

第2步 – 子类UIViewController

 import UIKit @IBDesignable class DesignableViewController: UIViewController { @IBInspectable var LightStatusBar: Bool = false override var preferredStatusBarStyle: UIStatusBarStyle { get { if LightStatusBar { return UIStatusBarStyle.lightContent } else { return UIStatusBarStyle.default } } } } 

第3步 – 从DesignableViewControllerinheritance

从以下位置更改ViewController的代码:

 class ViewController: UIViewController { 

至:

 class ViewController: DesignableViewController { 

第4步 – 在故事板上设置您的偏好

选择Storyboard上的ViewControllers并转到Attributes Inspector: 属性检查员

第5步 – 运行项目和测试

在我的项目中,我设置了带有2个视图控制器的标签栏控制器,并在两者之间来回切换。 似乎对我来说工作正常。 灯状态栏 黑暗状态栏

解决了:
Swift 3.1

只需在View Controller中使用此代码:

 override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent } 

斯威夫特3

将project.plist中基于视图控制器的状态栏外观设置为NO

 override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) UIApplication.shared.setStatusBarStyle(.default, animated: animated) } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) UIApplication.shared.setStatusBarStyle(.lightContent, animated: animated) } 

Objective-C答案:

 -(void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault; } -(void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent; } 
  let color = UIColor(red:0.00, green:0.60, blue:0.48,alpha:1.0) UINavigationBar.appearance().tintColor = UIColor.blue UINavigationBar.appearance().barTintColor = color 

要么

 self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white] 

如果您从公共视图控制器派生了视图控制器,那么您可以这样做:

第1步:将此密钥添加到您应用的info.plist文件中。

在此处输入图像描述

第2步:在公共视图控制器(或ParentViewController )中override它。

 override var preferredStatusBarStyle: UIStatusBarStyle { if self is YourChildViewController { return .lightContent } return .default } 

而已! 没有更多花哨的东西。