201

我正在使用 Xcode 8.0 beta 4。

在之前的版本中,UIViewController 有设置状态栏样式的方法

public func preferredStatusBarStyle() -> UIStatusBarStyle

然而,我发现它在 Swift 3 中变成了“Get ONLY varaiable”。

public var preferredStatusBarStyle: UIStatusBarStyle { get } 

如何提供在我的 UIViewController 中使用的样式?

4

33 回答 33

510

[更新] Xcode 10+ & Swift 4.2+

这是 iOS 7 及更高版本的首选方法

在您的应用程序中Info.plist,设置View controller-based status bar appearanceYES.

在每个视图控制器中覆盖preferredStatusBarStyleApple 文档)。例如:

override var preferredStatusBarStyle: UIStatusBarStyle {     
      return .lightContent
}

如果您preferredStatusBarStyle根据视图控制器内部的变化(例如,滚动位置或显示的图像是否暗)返回不同的首选状态栏样式,那么您将希望setNeedsStatusBarAppearanceUpdate()在该状态发生变化时调用。

iOS 7 之前的版本,不推荐使用的方法

Apple 已弃用此功能,因此将来会将其删除。使用上面的方法,这样下一个iOS版本发布时就不用重写了。

如果您的应用程序将支持在您的应用程序中Info.plist,设置View controller-based status bar appearanceNO.

在函数中appDelegate.swiftdidFinishLaunchingWithOptions添加:

UIApplication.shared.statusBarStyle = .lightContent

对于导航控制器

如果您使用导航控制器,并且希望在应用程序中使用并设置每个视图控制器的首选状态View controller-based status bar appearanceYES样式info.plist

extension UINavigationController {
   open override var preferredStatusBarStyle: UIStatusBarStyle {
      return topViewController?.preferredStatusBarStyle ?? .default
   }
}
于 2016-10-16T04:23:01.020 回答
175

最新更新(Xcode 10+ / Swift 4.2+)

对于任何愿意了解过去几年出现的不同方法背后的逻辑的人,本文将保持完整。同时,从Xcode 10 开始,Swift 4.2 第一种方法已被弃用并且不再受支持(即,如果您尝试使用它,它将不会生效)。Plist.info它仍会参考您的信息,以更好地了解标志和定制实践背后的原因。

重要说明

了解自定义状态栏外观的两种方法非常重要。它们是不同的,不应混用。

第一种方法 - 整个应用程序的一种颜色(自 iOS7 以来已弃用)

在 info.plist 中,您可以找到或创建一个名为

View controller-based status bar appearance

并将其设置为NO

它能做什么?它本质上建立了一个设置,表明在您的应用程序中,状态栏外观不是由每个视图控制器单独定义的。理解这一点非常重要。这意味着您对整个应用程序、所有屏幕都有统一的设置。有两种设置:default,即白底黑字,或lightContent,即黑底白字。

要设置其中一项(所有屏幕的一项设置):

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    application.statusBarStyle = .lightContent // .default
    return true
}

这样您就不需要在每个视图控制器上重新建立此设置。但是,您始终可以诉诸这种方法来自愿改变外观。

第二种方法——每个视图控制器的单独颜色

这是相反的。要使其工作,请继续 info.plist 并设置

View controller-based status bar appearance

_

这样,每当打开新的视图控制器时,如果您在UIViewController需要的每个实例中插入此实现,状态栏样式就会单独设置:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent // .default
}

您与第一个相同,为状态栏设置深色或浅色样式,每个视图控制器单独设置。

UIKit 在两种情况下获取此属性:

  1. 在屏幕初始化时,在准备 UI 时。
  2. 在调用setNeedsStatusBarAppearanceUpdate()代码时。

在后一种情况下,您可以通过以下代码操作状态栏外观:

var isDark = false {
    didSet {
        setNeedsStatusBarAppearanceUpdate()
    }
}

override var preferredStatusBarStyle: UIStatusBarStyle {
    return isDark ? .lightContent : .default
}

func toggleAppearance() {
   isDark.toggle()
}

然后,无论何时调用toggleAppearance(),都会触发状态栏样式更改。

第三种方法——哈克!

有一个 hack 可以直接访问状态栏:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    
    if let statusBar = UIApplication.shared.value(forKey: "statusBar") as? UIView {
        statusBar.backgroundColor = UIColor.blue
    }
    
    return true
}

为什么要破解?如果您需要黑色或白色以外的状态栏颜色,请使用未记录的 API。您statusBar使用 KVC 获取对象并设置其背景颜色。您以这种方式获得的对象 is UIStatusBar,它是从属性派生的UIView,因此自然支持backgroundColor属性。这是肮脏的,不合法的方式,但到目前为止,这是为状态栏设置自定义颜色的唯一方法(不考虑UINavigationBar允许完全自定义导航栏+状态栏外观的方法)。这很可能会导致您的应用被拒绝。但也许你很幸运。如果你是,在某些复杂的情况下(比如嵌套的层次结构、子导航和视图控制器),这可能是唯一的,或者至少是自定义状态栏外观不太麻烦的方法(例如,使其透明)

Xcode 10+,斯威夫特 4.2

没有其他选择了:开发人员应该让每个视图控制器定义状态栏外观,方法是将标志设置为YES(或省略此操作,因为默认情况下为 YES)并遵循上述说明。


奖金

您可能(尽管不鼓励)在复杂情况下使用基于黑客的解决方案,以便在任何阶段自愿更改状态栏外观。在颜色方面,以下扩展方法完全可以完成常规方法所能完成的工作。您可以根据自己的需要进行调整。

extension UIViewController {
    func setStatusBarStyle(_ style: UIStatusBarStyle) {
        if let statusBar = UIApplication.shared.value(forKey: "statusBar") as? UIView {
            statusBar.backgroundColor = style == .lightContent ? UIColor.black : .white
            statusBar.setValue(style == .lightContent ? UIColor.white : .black, forKey: "foregroundColor")
        }
    }
}
于 2017-12-11T10:13:26.477 回答
132

您可以尝试覆盖返回的值,而不是设置它。该方法被声明为 { get },因此只需提供一个 getter:

 override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

如果您有条件地设置它,您需要调用setNeedsStatusBarAppearanceUpdate()它以便在您准备好时为更改设置动画

于 2016-08-03T10:52:21.347 回答
109

Swift 3 & 4, iOS 10 & 11, Xcode 9 & 10
对我来说,这个方法不起作用:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

当我习惯于每个视图控制器时,但这有效:

  • 在文件 info.list 中,添加 row:View controller-based status bar appearance并设置为NO

  • 接下来在 appdelegate 中:

    UIApplication.shared.statusBarStyle = .lightContent
    
于 2016-11-09T10:00:14.070 回答
46

Xcode 10 或更高版本

在 Swift 5 中测试

无需代码,只需按照以下步骤操作。

如果要更改整个应用程序中的状态栏。

  1. 从项目导航器(左侧面板)中选择项目。
  2. 选择目标。
  3. 选择常规选项卡。
  4. 查找部署信息。
  5. 将状态栏样式更改为浅色(对于深色背景“浅色”,浅色背景“默认”

不要忘记 info.plist 更改

  1. 选择信息选项卡
  2. 将此键添加到您的 plist 文件中“查看基于控制器的状态栏外观”= NO

运行您的项目并检查它。

我在 swift 5 和 Xcode 10.2 & 11.0 中的项目

于 2019-05-21T09:23:24.533 回答
40

如果要将statusBar的颜色更改为白色,对于 a 中包含的所有视图,请在其中UINavigationController添加AppDelegate

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    UINavigationBar.appearance().barStyle = .blackOpaque
    return true
}

这段代码:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

不适用于UIViewControllers包含在 a 中UINavigationController,因为编译器查找的statusBarStyle是 的UINavigationController,而不是它所包含statusBarStyleViewControllers

希望这可以帮助那些没有成功接受答案的人!

于 2017-02-10T14:30:19.507 回答
27

如果您想在视图出现后随时更改状态栏样式,您可以使用以下命令:

  • 在文件 info.list 添加行:查看基于控制器的状态栏外观并将其设置为YES

    var viewIsDark = Bool()
    
    func makeViewDark() {
    
        viewIsDark = true
        setNeedsStatusBarAppearanceUpdate()
    }
    
    func makeViewLight() {
    
        viewIsDark = false
        setNeedsStatusBarAppearanceUpdate()
    }
    
    override var preferredStatusBarStyle: UIStatusBarStyle {
    
        if viewIsDark {
            return .lightContent 
        } else {
            return .default 
        } 
    }
    
于 2017-01-25T19:43:27.150 回答
25

您需要在 Info.plist 文件中添加以下键:

View controller-based status bar appearance布尔值设置为NO

在您的 appdelegate 类中,在didFinishLaunchingWithOptions返回之前的方法中。

let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
if statusBar.responds(to:#selector(setter: UIView.backgroundColor)) {
    statusBar.backgroundColor = UIColor.red
}
UIApplication.shared.statusBarStyle = .lightContent

更改backgroundColorstatusBarStyle根据要求。

于 2017-02-20T13:16:32.193 回答
15

您也可以在情节提要中执行此操作

  1. 在 info.plist “查看基于控制器的状态栏外观”中创建一个新条目,将其设置为“YES”。
  2. 转到您的故事板,然后选择要更改的导航控制器。单击故事板文档大纲部分的导航栏(故事板上的左侧面板)
  3. 转到右侧面板并单击属性部分
  4. 在导航栏部分下,您将看到样式。选择您想要的样式(默认为黑色,黑色为白色)

您必须为您拥有的每个导航控制器执行此操作。但是,该导航控制器下的任何视图都会将所有视图的状态栏样式/颜色更改为您刚刚选择的样式/颜色。我发现这个选项更好,因为您可以立即看到结果,而不必在每个视图控制器中添加额外的代码行。

在此处输入图像描述

(在一个全 Swift 项目中使用 Xcode 8.3.3 完成)

于 2017-07-12T09:53:30.363 回答
14

对于希望在以下设备上更改所有视图控制器状态栏的人:iOS 11,Swfit 4/5 解决方案非常简单。

1) Info.plist 添加:

查看基于控制器的状态栏外观 -> 否

2) XCode slect 项目左侧 >目标> 选择您的项目 > 在常规 > 部署信息 > 选择状态栏样式:Light

如果您只想更改一个 viewcontroller的状态栏,请在 viewDidLoad 添加:

2.1 ) 信息列表

查看基于控制器的状态栏外观 -> YES

2.2 )

override var preferredStatusBarStyle : UIStatusBarStyle {
    return .lightContent
}

从 App Delegate 更改的 Objective-C(或 react native):

1) Info.plist 添加:

查看基于控制器的状态栏外观 -> 否

2) AppDelegate -> didFinishLaunchingWithOptions

[[UIApplication sharedApplication] setStatusBarHidden:NO animated:YES];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDarkContent animated:YES];

更改状态栏在尝试推送(导航控制器)时不起作用,仅在呈现模态视图控制器时。

于 2018-10-16T10:35:25.633 回答
10

第一步,您需要在文件中添加带有 key:和View controller-based status bar appearancevalue的行。之后,在您的控制器中添加 2 个函数,以仅指定该控制器将起作用:NOInfo.plist

override func viewWillAppear(_ animated: Bool) {
       super.viewWillAppear(animated)
       UIApplication.shared.statusBarStyle = .lightContent
}

override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        UIApplication.shared.statusBarStyle = .default    
}
于 2017-02-02T04:14:23.953 回答
9

斯威夫特 5

要在https://stackoverflow.com/a/40066798/2082851上为PRAVEEN 的答案添加更多详细信息,我想提供我的实现。它支持自定义每个控制器的状态栏的灵活性。

总的来说,我们将在所有情况下创建一个BaseViewController处理statusBarStyle属性。当您创建一个新控制器时,将其作为此基本控制器的子类。

每当您想更改状态外观时,您只需要更新此属性。状态栏样式将立即更新。

执行

class BaseViewController: UIViewController {

    var statusBarStyle: UIStatusBarStyle = .default {
        didSet {
            setNeedsStatusBarAppearanceUpdate()
        }
    }

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return statusBarStyle
    }
}

演示

class ViewController: BaseViewController, UIScrollViewDelegate {

    let scrollView = UIScrollView()
    ... 
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        UIView.animate(withDuration: 0.3) {
            if scrollView.contentOffset.y > 30 {
                self.statusBarStyle = .darkContent
            } else {
                self.statusBarStyle = .lightContent
            }
        }
    }
}

在此处输入图像描述

2.UINavigationController

对于UINavigationController,这是一种特殊情况,您可以采用以下任一解决方案:

解决方案 A:使用消息派发覆盖

由于 UINavigationController 是一个NSObject并且继承自ObjectiveC,因此它的方法是message dispatch并且您可以覆盖它们。

extension UINavigationController {
   open override var preferredStatusBarStyle: UIStatusBarStyle {
      return topViewController?.preferredStatusBarStyle ?? .default
   }
}

解决方案 B:创建UINavigationController子类

如果您已经有一个自定义UINavigationController(通常需要控制更多的要求),这是最适合您的解决方案。

final class NavigationController: UINavigationController {
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return topViewController?.preferredStatusBarStyle ?? super.preferredStatusBarStyle
    }
}
于 2020-03-13T02:56:38.130 回答
8

处理导航栏时,状态栏文本颜色似乎存在一个小问题。

如果您希望 .plist 条目 View controller-based status bar appearance 设置为YES,当您有彩色导航栏时,它有时将不起作用。

例如:

override func viewWillAppear(_ animated: Bool) {
    let nav = self.navigationController?.navigationBar
    nav?.barTintColor = .red
    nav?.tintColor = .white
    nav?.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
    setNeedsStatusBarAppearanceUpdate()
}

override var preferredStatusBarStyle: UIStatusBarStyle {return .lightContent}

即使您在 AppDelegate 中设置了以下内容,上面的代码也不起作用:

UIApplication.shared.statusBarStyle = .lightContent

对于那些仍在苦苦挣扎的人,显然它以某种方式通过导航栏中的样式判断状态栏是需要亮还是暗。因此,我设法通过在 viewWillAppear 中添加以下行来解决此问题:

nav?.barStyle = UIBarStyle.black

当条形样式为黑色时,它会监听您覆盖的变量。希望这可以帮助某人:)

于 2018-01-27T06:50:22.150 回答
7

斯威夫特 3

在 Info.plist 中添加一个名为“View controller-based status bar appearance”的行并将其值设置为No.

class YourViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        UIApplication.shared.statusBarStyle = .lightContent //or .default
        setNeedsStatusBarAppearanceUpdate()

    }

}
于 2017-08-14T16:33:28.937 回答
7
  1. 选择轻量级内容在此处输入图像描述

  2. 基于视图控制器的状态栏外观添加为NO.plist 在此处输入图像描述

于 2020-10-08T13:12:30.337 回答
7

通过@Krunal https://stackoverflow.com/a/49552326/4697535添加到伟大的asnwer

如果您使用的是UINavigationControllerpreferredStatusBarStyle将不会影响UIViewController

Xcode 10 和 Swift 4。

设置自定义UINavigationController

例子:

class LightNavigationController: UINavigationController {

   open override var preferredStatusBarStyle: UIStatusBarStyle {
       return .lightContent
   }
}

为应用级解决方案使用扩展:

extension UINavigationController {

  open override var preferredStatusBarStyle: UIStatusBarStyle {
      guard let index = tabBarController?.selectedIndex else { return .default }
      switch index {
      case 0, 1, 2: return .lightContent // set lightContent for tabs 0-2
      default: return .default // set dark for tab 3
      }
  }
}
于 2018-11-12T14:23:09.703 回答
6

这是关于状态栏样式更改的Apple 指南/说明。

如果要设置状态栏样式,则应用程序级别设置UIViewControllerBasedStatusBarAppearanceNO在您的.plist文件中。并在您的appdelegate>didFinishLaunchingWithOptions添加以下 ine(以编程方式,您可以从应用程序委托中执行此操作)。

目标 C

[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];

迅速

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    application.statusBarStyle = .lightContent
    return true
}

如果您想在视图控制器级别设置状态栏样式,请按照以下步骤操作:

  1. 如果您只需要在 UIViewController 级别设置状态栏样式,请在文件中设置UIViewControllerBasedStatusBarAppearanceto 。YES.plist
  2. 在 viewDidLoad 添加函数 -setNeedsStatusBarAppearanceUpdate

  3. 覆盖视图控制器中的 preferredStatusBarStyle。

目标 C

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self setNeedsStatusBarAppearanceUpdate];
}

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}

迅速

override func viewDidLoad() {
    super.viewDidLoad()
    self.setNeedsStatusBarAppearanceUpdate()
}

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

根据状态栏样式设置级别设置 .plist 的值。

在此处输入图像描述

于 2018-03-29T09:21:35.350 回答
6

Xcode 8.3.1,斯威夫特 3.1

  1. 在 info.plist “查看基于控制器的状态栏外观”中创建一个新条目,将其设置为“否”。

  2. 打开 AppDelegate.swift 并在“didFinishLaunchingWithOptions”方法中添加这些行:

application.statusBarStyle = .lightContent

于 2017-04-22T14:16:15.820 回答
6

斯威夫特 4+

对于白色状态栏文本:

navigationController.navigationBar.barStyle = .blackTranslucent
于 2018-02-09T15:00:41.757 回答
5

Swift 4.0 请在“didFinishLaunchingWithOptions launchOptions:”Appdelegate 类中使用此代码

UIApplication.shared.statusBarStyle = .lightContent
let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
if statusBar.responds(to: #selector(setter: UIView.backgroundColor)){
  statusBar.backgroundColor = UIColor.black
}
于 2017-11-03T03:12:05.123 回答
4

iOS 11.2

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    UINavigationBar.appearance().barStyle = .black

    return true
}
于 2018-02-27T06:43:11.853 回答
3

如果您使用的是模态演示,则需要设置:

viewController.modalPresentationCapturesStatusBarAppearance = true
于 2019-07-12T11:12:13.263 回答
3

这对我有用

View controller-based status bar在 plist 中将外观设置为NO然后在 UIViewController viewDidAppear仅添加以下行

UIApplication.shared.setStatusBarStyle(UIStatusBarStyle.lightContent, animated: true)
于 2016-09-30T12:14:51.130 回答
3

迅速 3

如果在 Info.plist 中查看基于控制器的状态栏外观 = YES

然后将此扩展用于所有 NavigationController

    extension UINavigationController
    {
        override open var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
         }
     }

如果没有 UINavigationController 并且只有 UIViewController 然后使用下面的代码:

    extension UIViewController
    {
        override open var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
         }
     }
于 2017-04-24T06:34:55.767 回答
2

如果您仍然无法根据方法更改状态栏样式

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

您可以尝试使用此方法:

override viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    navigationController?.navigationBar.barStyle = .black
}
于 2019-10-29T01:02:49.027 回答
2

如果您收到警告:iOS 9.0 中已弃用“statusBarStyle”的设置器:使用 -[UIViewController preferredStatusBarStyle],然后使用以下代码将状态栏设置为亮或暗:

//To set the status bar to white
self.navigationController?.navigationBar.barStyle = .black //or .blackTranslucent

//To set the status bar to black
self.navigationController?.navigationBar.barStyle = .default

这不会使您的 navBar 更改它纯粹指示样式,因此会相应地更改状态栏。

注意。您需要确保您在 info.plist 中进行了设置。

View controller-based status bar appearance to YES
于 2019-04-24T09:31:39.513 回答
2

这些答案中的大多数都是重新散列的相同内容,但是当使用深色背景时,它们都没有真正为我解决启动屏幕问题。

我通过以下内容解决了这个问题,info.plist它产生了一个轻量级的状态栏。

<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>
于 2018-08-13T06:57:05.337 回答
2

在 iOS 13 中,您可以使用.darkContent UIStatusBarStyle属性来显示深色状态栏

于 2019-09-13T14:35:29.177 回答
2

您可以使用名为“shouldStatusBarDark”的布尔属性来切换状态栏颜色。您还可以在滚动时更新其值以更改状态栏颜色。

 var shouldStatusBarDark = false {
     didSet {
         setNeedsStatusBarAppearanceUpdate()
     }
 }

 override var preferredStatusBarStyle: UIStatusBarStyle {
     return shouldStatusBarDark ? .default : .lightContent
 }

 func scrollViewDidScroll(_ scrollView: UIScrollView) {
     let offSetY = scrollView.contentOffset.y
     if offSetY > 50 {
         UIView.animate(withDuration: 0.4, animations: {
             self.navView.alpha = 1
             self.shouldStatusBarDark = true
         })
     } else {
         UIView.animate(withDuration: 0.4, animations: {
             self.navView.alpha = 0
             self.shouldStatusBarDark = false
         })
     }
 }
于 2018-03-20T02:33:13.187 回答
0

对于目标 C,只需在应用程序的 didFinishLaunch 方法中添加这一行

UIApplication.sharedApplication.statusBarStyle = UIStatusBarStyleLightContent;
于 2017-09-09T12:08:48.310 回答
0

我也在为此苦苦挣扎,因此,如果您要呈现 FULLSCREEN 模态视图控制器,请确保设置.modalPresentationStyle.fullscreen,然后在您的呈现视图控制器上,只需覆盖.preferredStatusBarStyle.lightContent.

所以:

let navigationController = UINavigationController(rootViewController: viewController)
navigationController.modalPresentationStyle = .fullScreen // <=== make sure to set navigation modal presentation style
present(navigationController, animated: true, completion: nil)

在您的自定义视图控制器上,覆盖状态栏样式:

    override var preferredStatusBarStyle: UIStatusBarStyle {
        .lightContent
    }
于 2020-11-04T08:23:31.793 回答
0

使用 WebkitView

斯威夫特 9.3 iOS 11.3

import UIKit
import WebKit

class ViewController: UIViewController, WKNavigationDelegate, WKUIDelegate {

    @IBOutlet weak var webView: WKWebView!
    var hideStatusBar = true

    override func loadView() {
        let webConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: .zero, configuration: webConfiguration)
        webView.uiDelegate = self
        view = webView
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        self.setNeedsStatusBarAppearanceUpdate()
        let myURL = URL(string: "https://www.apple.com/")
        let myRequest = URLRequest(url: myURL!)
        UIApplication.shared.statusBarView?.backgroundColor = UIColor.red

         webView.load(myRequest)

    }
}

extension UIApplication {

    var statusBarView: UIView? {
        return value(forKey: "statusBar") as? UIView
    }

}
于 2018-04-20T19:31:38.330 回答
-1

斯威夫特 3

要在您的应用程序中设置相同的导航栏外观,您可以在 AppDelegate.swift 中执行此操作:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        setupNavigationBarAppearence()
        return true
    }



private func setupNavigationBarAppearence(){
        let navigationBarAppearace = UINavigationBar.appearance()
        navigationBarAppearace.isTranslucent = false
        //nav bar color
        navigationBarAppearace.barTintColor = UIColor.primaryColor()
        //SETS navbar title string to white
        navigationBarAppearace.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
        //Makes the batery icon an any other icon of the device to white.
        navigationBarAppearace.barStyle = .black
    }
于 2017-09-01T19:57:24.177 回答