【问题标题】:Changing the Status Bar Color for specific ViewControllers using Swift in iOS8在 iOS 8 中使用 Swift 更改特定 ViewController 的状态栏颜色
【发布时间】:2015-01-13 10:08:41
【问题描述】:
override func preferredStatusBarStyle() -> UIStatusBarStyle {
 return UIStatusBarStyle.LightContent;
}

在任何 ViewController 中使用上述代码将特定视图控制器的状态栏颜色设置为白色对我来说在 iOS8 中不起作用。有什么建议?使用 UIApplication.sharedApplication 方法,在整个应用的 Info.plist 中进行所需更改后颜色会发生变化。

// Change the colour of status bar from black to white
UIApplication.sharedApplication().statusBarStyle = .LightContent

我如何才能更改某些必需和特定 ViewControllers 的状态栏颜色?

【问题讨论】:

    标签: swift uiviewcontroller ios8 xcode6 statusbar


    【解决方案1】:

    在阅读了所有建议并尝试了一些事情之后,我可以使用以下步骤使其适用于特定的视图控制器:

    第一步:

    打开您的 info.plist 并将一个名为“查看基于控制器的状态栏外观”的新键插入到

    第二步(只是解释,不需要实现):

    通常我们将以下代码放在应用程序中(_:didFinishLaunchingWithOptions:) AppDelegate 的方法,

    斯威夫特 2

    UIApplication.sharedApplication().statusBarStyle = .LightContent
    

    Swift 3

    UIApplication.shared.statusBarStyle = .lightContent
    

    但这会影响所有 ViewController 的 statusBarStyle

    那么,如何让它为特定的 ViewControllers 工作 - 最后一步:

    打开要更改statusBarStyle的viewcontroller文件,将以下代码放入viewWillAppear()

    斯威夫特 2

    UIApplication.sharedApplication().statusBarStyle = .LightContent
    

    Swift 3

    UIApplication.shared.statusBarStyle = .lightContent
    

    另外,为特定的 viewController 实现 viewWillDisappear() 方法并放入以下代码行,

    斯威夫特 2

    override func viewWillDisappear(animated: Bool) {
        super.viewWillDisappear(animated)
        UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.Default
    
    }
    

    Swift 3

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        UIApplication.shared.statusBarStyle = UIStatusBarStyle.default
    }
    

    此步骤将首先更改特定视图控制器的statusBarStyle,然后在特定视图控制器消失时将其更改回default。不实现viewWillDisappear() 会将statusBarStyle 永久更改为UIStatusBarStyle.LightContent 的新定义值

    【讨论】:

    • 注意如果在info.plist文件中设置Status bar is initially hidden = YES,“View controller-based status bar appearance = NO”会导致状态栏被隐藏。
    • 如果你使用viewWillDisappear()改回UIStatusBarStyle.Default,你应该使用viewWillAppear()来初始化它,而不是viewDidLoad()....否则如果你回到那个视图无需重新加载,您将看不到您所期待的 StatusBarStyle
    • 对于 Swift 3: UIApplication.shared.statusBarStyle = .lightContent
    • 目前还不清楚你是怎么改变状态栏颜色的
    • 伙计们,iOS 9 已弃用它
    【解决方案2】:

    (截至 2021 年 10 月 25 日)

    Swift 5Swift 4.2Swift 4

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        setNeedsStatusBarAppearanceUpdate()
    }
    override var preferredStatusBarStyle: UIStatusBarStyle {
        .lightContent
    }
    

    【讨论】:

    • 如果您要复制和粘贴此代码,请务必致电 super.viewWillAppear
    • 使用UIApplication.shared.statusBarStyle = .lightContent 会导致编译器警告:iOS 9.0 中已弃用“statusBarStyle”的设置器:使用 -[UIViewController preferredStatusBarStyle]
    • 在应用程序的 Info.plist 中,将“查看基于控制器的状态栏外观”设置为 YES
    • 如果您的视图控制器嵌入在根导航控制器中,则不起作用。如果控制器 A 是白色的,然后推到控制器 B,这将不起作用,它将保持白色。
    • 如果您展示您的视图控制器模态包装在导航控制器中,您需要为导航控制器设置modalPresentationCapturesStatusBarAppearance = true
    【解决方案3】:

    带有 NavigationController 的 Swift 4.2 解决方案

    第一步:

    打开您的 info.plist 并插入一个名为“查看基于控制器的状态栏外观”或 UIViewControllerBasedStatusBarAppearanceYES 的新键,让每个 VC 使用自己的状态属性。

    第二步

    在每个 VC 中,像这样覆盖 preferredStatusBarStyle 属性:

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

    最后一步

    覆盖自定义 NavigationController 类中的 preferredStatusBarStyle 属性:

    class NavigationController : UINavigationController {
    
    override var preferredStatusBarStyle : UIStatusBarStyle {
    
        if let topVC = viewControllers.last {
            //return the status property of each VC, look at step 2
            return topVC.preferredStatusBarStyle  
        }
    
        return .default
    }
    

    【讨论】:

    • 这只是使用导航控制器和您自己的控制器实现预期结果的方法。你也可以像我为我的项目一样为prefersStatusBarHidden这样做:)
    【解决方案4】:

    我遵循了本教程,它对我有用。但是,我不确定是否有任何警告。

    https://coderwall.com/p/dyqrfa/customize-navigation-bar-appearance-with-swift

    • 打开您的 info.plist 并设置 UIViewControllerBasedStatusBarAppearancefalse
    • AppDelegate.swift的第一个函数中,包含didFinishLaunchingWithOptions,设置你想要的颜色。

    UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent

    • Swift 3 更新 *

      UIApplication.shared.statusBarStyle = .lightContent

    【讨论】:

    • 每个视图控制器的具体情况如何
    • 没错,这是完整的应用程序,这不是问题。
    • 我正在使用 iOS 8 Swift 和 xCode 6.1.1,仅执行这两个步骤是行不通的。您还需要将UIApplication.sharedApplication().statusBarHidden = false 添加到 AppDelegate.swift didFinishLauchingWithOptions
    • 这为整个应用程序设置它。具体的视图控制器,见第一个答案。它对我有用。
    • 'statusBarStyle' 的设置器在 iOS 9.0 中已弃用:使用 -[UIViewController preferredStatusBarStyle]
    【解决方案5】:

    这里有十亿个答案,所以我想为什么不以 extension 的形式添加另一个答案(在 @Cœur 的帮助下)

    斯威夫特 3

    扩展:

    extension UIApplication {
        class var statusBarBackgroundColor: UIColor? {
            get {
                return (shared.value(forKey: "statusBar") as? UIView)?.backgroundColor
            } set {
                (shared.value(forKey: "statusBar") as? UIView)?.backgroundColor = newValue
            }
        }
    }
    

    实施:

    UIApplication.statusBarBackgroundColor = .blue
    

    【讨论】:

    • 请注意,这种方法可能会被视为访问私有 API,并且可能意味着您的应用将被 Apple 拒绝。
    • 或者至少它依赖于 Apple 的实现细节,并且可能会随着 iOS 的变化而在没有警告的情况下中断。
    【解决方案6】:

    在您的 Info.plist 中,您需要将基于视图控制器的状态栏外观定义为任何值。

    如果您将其定义为 YES,那么您应该覆盖每个视图控制器中的 preferredStatusBarStyle 函数。

    如果您将其定义为 NO,那么您可以使用

    在 AppDelegate 中设置样式
    UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
    

    【讨论】:

    • setStatusBarStyle 在 iOS 9.0 中已弃用
    • @Jeffrey_Neo 虽然这是真的,但我无法让替代品工作。将您的评论视为工作代码的答案会很有用。
    【解决方案7】:
    override func viewWillAppear(animated: Bool) {
        self.navigationController?.navigationBarHidden =  true
    
        UIApplication.sharedApplication().statusBarHidden = false
        UIApplication.sharedApplication().statusBarStyle = .LightContent
    
        let statusBar: UIView = UIApplication.sharedApplication().valueForKey("statusBar") as! UIView
        if statusBar.respondsToSelector("setBackgroundColor:") {
            statusBar.backgroundColor = UIColor.redColor()
        }
    
    }
    

    【讨论】:

    • 使用 valueForKey("statusBar") 可能不符合 Apple 准则
    【解决方案8】:

    斯威夫特 3

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

    这就是为特定视图控制器设置状态栏背景颜色的解决方案。

    【讨论】:

    • UIView 在 Swift 中总是响应 backgroundColor。
    【解决方案9】:

    SWIFT 2

    通过在我的 viewWillAppear 中添加以下内容,我能够成功更改状态栏背景的外观:

    let statusBar: UIView = UIApplication.sharedApplication().valueForKey("statusBar") as! UIView
    
        if statusBar.respondsToSelector(Selector("setBackgroundColor:")) {
            statusBar.backgroundColor = .redColor()
        }
    

    【讨论】:

      【解决方案10】:

      如您所述实施preferredStatusBarStyle 并在ViewDidLoad 中调用self.setNeedsStatusBarAppearanceUpdate() 和 同样在 Info.plist 中将UIViewControllerBasedStatusBarAppearance 设置为YES(默认为YES

      不清楚为什么它不起作用。我需要检查代码。另一个建议是 使用 viewDidLoad UIApplication.sharedApplication().statusBarStyle = .LightContent 中的工作代码,并在您查看消失时将其更改为默认值 viewWillDisappear

      【讨论】:

      • 刚刚实施答案的第一部分,为我工作。但是,我没有在 Info.plist 中添加 UIViewcontrollerBasedStatusBarAppearance。它仍然有效。
      【解决方案11】:

      (截至 2020 年 6 月 10 日)

      Swift 5无需编辑 .Plist 文件

      如果您使用Storyboard,请转到NavigationController,选择navigationBar,单击Attributes Inspector,然后更改style。如果你需要light content白色状态栏)设置它除了default之外的任何东西让我们说设置样式black如果你想要dark content黑色状态栏 ) 设置它default

      默认 (UIBarStyleDefault) 会导致黑色前景 UIStatusBarStyleDefault 状态栏。而UIBarStyleBlack 会给出一个UIStatusBarStyleLightContent 状态栏。

      以编程方式

      let nav = UINavigationController(rootViewController: rootViewController)
      
          nav.navigationBar.barStyle = .default //gives you dark Content status bar
      
          nav.navigationBar.barStyle = .black  //gives you light content status bar
      

      没有导航栏编辑.Plist

      UIViewControllerBasedStatusBarAppearance/View controller-based status bar appearance添加到您的info.plist,设置值为true

      Override 控制器中的 preferredStatusBarStyle 属性

      class ViewController: UIViewController {
          override var preferredStatusBarStyle : UIStatusBarStyle {
              return .lightContent
          }
      }
      

      【讨论】:

        【解决方案12】:

        在我的情况下,我使用故事板来组织我的视图控制器。我想更改所有状态栏样式。

        如下图所示。

        Stars 视图控制器是CPBaseNavigationControllerCPBaseNavigationControllerUINavigationController 的子类。

        我尝试做下一个设置:

        1. AppDelegate.swift func didFinishLaunchingWithOptions,添加

          //change status bar color
          UIApplication.sharedApplication().statusBarHidden = false
          UIApplication.sharedApplication().statusBarStyle = .LightContent
          

          但没有效果。

        2. 在 StoryBoard 中,找到Base Tab BarController(上图)。选择Attributes Inspector,将Sattus Bar 属性更改为Light Content。太糟糕了,没有效果。

        1. 最后我明白了。在我的自定义导航控制器 CPBaseNavigationController,添加 func preferredStatusBarStyle

          override func preferredStatusBarStyle() -> UIStatusBarStyle {
             return .LightContent
          }
          

          效果很好!

        此外,statusBarStyle 在 9.0 中已弃用,您可以使用 -[UIViewController preferredStatusBarStyle]

        【讨论】:

          【解决方案13】:

          在 Swift 3.0 Xcode 8 中一切都变得简单了

          在 App Delegate 文件中使用下面的代码,之后

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

          插入:

          UINavigationBar.appearance().barStyle = .black
          
          UINavigationBar.appearance().barTintColor = UIColor(red: 230, green: 32, blue: 31, alpha: 1.0)
          

          【讨论】:

          • 红色、绿色和蓝色的值在 0 到 1 的范围内。您必须将它们除以 255,否则它将不起作用。
          【解决方案14】:

          斯威夫特 3

          //
          //  LoginController.swift
          //  Swift 3
          //
          //  Created by The Crab on 17/01/2017.
          //  Copyright © 2017 Paxi Labs. All rights reserved.
          //
          
          import UIKit
          
          class LoginController: UIViewController {
          
              override func viewDidLoad() {
                  super.viewDidLoad()
          
                  setNeedsStatusBarAppearanceUpdate()
          
                  view.backgroundColor = UIColor(red: 61/255, green: 91/255, blue: 151/255, alpha: 1)
          
              }
          
              override var preferredStatusBarStyle: UIStatusBarStyle {
                  return .lightContent
              }
          }
          

          【讨论】:

            【解决方案15】:

            对于 Swift 3

            .plist

            View controller-based status bar appearance = NO
            

            AppDelegate.swift

              func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
                    // Custom statubar
                    UIApplication.shared.isStatusBarHidden = false
                    UIApplication.shared.statusBarStyle = .lightContent
                    let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
                    statusBar.backgroundColor = UIColor.gray
            
                    return true
                }
            

            【讨论】:

            • 我尝试了所有解决方案......这只对我有用!我不知道为什么:D
            • 幸运抽奖
            • “isStatusBarHidden”的设置器在 iOS 9.0 中已弃用:使用 -[UIViewController prefersStatusBarHidden] ...
            【解决方案16】:

            适用于基于导航的应用程序

                var addStatusBar = UIView()
                addStatusBar.frame = CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, 20);
                addStatusBar.backgroundColor = global().UIColorFromRGB(0x65b4d9)
                self.window?.rootViewController?.view .addSubview(addStatusBar)
            

            【讨论】:

            • 在哪里添加这个特定的代码,只是无法让它工作。
            • 你可以在didFinishLaunchingWithOptions的App委托文件中添加它
            • 使用 addStatusBar.frame = CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, 20) 代替硬编码的 320 宽度不是更好吗?
            • 编辑@TorstenOjaperv
            • swift 3.0 怎么做?
            【解决方案17】:

            实现这项工作的另一个非常简单的方法是创建 UINavigationController 类的扩展。

            由于覆盖 preferredStatusBarStyle: 方法不起作用除非我们在 UINavigationController 类中进行。

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

            【讨论】:

              【解决方案18】:

              Swift 4 对于没有嵌入 navigationViewController 的特定 ViewController,只需将其添加到您的 ViewController 文件中。

              override var preferredStatusBarStyle : UIStatusBarStyle {
                  return .lightContent
              }
              

              【讨论】:

              • 如果我们嵌入了导航控制器,你会怎么做?
              【解决方案19】:

              我在这方面遇到了一些麻烦。我对全局更改视图中的状态栏颜色确实感觉不太好,然后将其更改回视图确实像接受的答案一样消失了。信不信由你,您可以通过在所需的视图控制器上覆盖 preferredStatusBarStyle 来实现此功能。很长一段时间后,这就是我为使其正常工作所做的工作:

              1. info.plist 中基于视图控制器的状态栏外观更改为 YES。
              2. 现在任何全屏视图控制器都可以通过覆盖 preferredStatusBarStyle 来更改状态栏样式。
              3. 我指定全屏是因为这不适用于(非全屏)模态视图控制器,除非将 modal​Presentation​Captures​Status​Bar​Appearance 设置为 Yes。
              4. 此外,如果您有嵌入式视图控制器,例如在导航控制器中,它会询问最顶部的视图控制器的状态栏样式。覆盖child​View​Controller​For​Status​Bar​Style 并传递嵌入式视图控制器应该可以工作,但它不适合我。所以我只是将嵌入式视图控制器的首选状态栏作为首选状态栏样式返回。像这样的:

                override var preferredStatusBarStyle: UIStatusBarStyle {
                     if let topViewController = viewControllers.last {
                         return topViewController.preferredStatusBarStyle
                     }
                
                     return .default
                }
                

              【讨论】:

              • 这个答案对我有帮助!我发现由于某种原因,我的导航控制器(以模态方式呈现)没有隐式询问最顶层的视图控制器的状态栏样式。所以我必须继承UINavigationController 并覆盖其中的child​View​Controller​For​Status​Bar​Style var,返回self.topViewController
              【解决方案20】:

              在 Swift 5 或 xcode 11 及更高版本中,将 info.plist 中的(查看基于控制器的状态栏外观)键设置为 NO 然后转到项目目标并选择常规,将状态栏样式设置为深色或浅色

              【讨论】:

                【解决方案21】:

                我在App Delegate 文件中使用以下代码设置了特定颜色(RGB 格式):

                func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
                . . .
                
                 UIApplication.sharedApplication().statusBarHidden = false
                        UIApplication.sharedApplication().statusBarStyle = .LightContent
                
                        let statusBar: UIView = UIApplication.sharedApplication().valueForKey("statusBar") as! UIView
                        if statusBar.respondsToSelector(Selector("setBackgroundColor:")) {
                            statusBar.backgroundColor = UIColor.init(red: 0.1, green: 0.27, blue: 0.60, alpha: 1.0)
                        }
                
                . . .
                }
                

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

                查看基于控制器的状态栏外观,布尔值设置为 NO

                【讨论】:

                • 有了Siwft 3.0,怎么办?
                【解决方案22】:

                我可以建议你一个更简单的方法,

                1. 正如 Apple 文档所说,只需在 viewDidLoad 中调用 setNeedsStatusBarAppearanceUpdate

                如果视图控制器的状态栏属性(例如隐藏/未隐藏状态或样式)发生更改,则调用此方法。如果您在动画块中调用此方法,则更改将与动画块的其余部分一起进行动画处理。

                1. 实现 preferredStatusBarStyle 返回您的首选类型。

                它在 iOS 10.1 中对我有用。

                目标 C

                [self setNeedsStatusBarAppearanceUpdate];
                
                -(UIStatusBarStyle)preferredStatusBarStyle {
                     return UIStatusBarStyleLightContent;
                }
                

                斯威夫特

                setNeedsStatusBarAppearanceUpdate()
                
                var preferredStatusBarStyle: UIStatusBarStyle { 
                    return .lightContent
                }
                

                我很惊讶没有人指出这一点。无论如何享受:)

                【讨论】:

                  【解决方案23】:

                  状态栏自定义颜色(iOS11+、Swift4+)

                  如果您正在寻找如何将状态栏更改为您的自定义颜色的解决方案,这是可行的解决方案。

                  let statusBarView = UIView()
                  view.addSubview(statusBarView)
                  statusBarView.translatesAutoresizingMaskIntoConstraints = false
                  NSLayoutConstraint.activate([
                      statusBarView.topAnchor.constraint(equalTo: view.topAnchor),
                      statusBarView.leftAnchor.constraint(equalTo: view.leftAnchor),
                      statusBarView.rightAnchor.constraint(equalTo: view.rightAnchor),
                      statusBarView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor)
                  ])
                  statusBarView.backgroundColor = .blue
                  

                  【讨论】:

                    【解决方案24】:

                    什么对我有用,在情节提要中,转到导航控制器,选择导航栏,单击属性检查器,然后将样式从默认更改为黑色。就是这样!

                    【讨论】:

                      【解决方案25】:

                      在 Swift 4 或 4.2 中

                      你可以添加你的vc

                      preferredStatusBarStyle

                      并将返回值设置为

                      .lightContent 或 .default

                      例如:

                      override var preferredStatusBarStyle: UIStatusBarStyle {
                              return .lightContent
                      }
                      

                      【讨论】:

                        【解决方案26】:

                        Swift 3.0 更新

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

                        【讨论】:

                          【解决方案27】:

                          SWIFT 4.2 嘿,我想分享一个对我有用的解决方案,这是我从 Graig Grummitt 的一篇关于这个难以捉摸的主题的精彩文章中得到的。

                          第 1 步 正如其他人提到的那样,添加到您的 PLIST 中

                          View controller-based status bar appearance YES
                          

                          在 RootViewcontroller 中添加第 2 步

                          var statusBarHidden: Bool = false {
                                  didSet(newValue) {
                                      UIView.animate(withDuration: 0.1) {
                                          self.setNeedsStatusBarAppearanceUpdate()
                                      }
                                  }
                              }
                          
                              override var prefersStatusBarHidden: Bool {
                                  return statusBarHidden
                              }
                          
                              var vcStatusBarStyle: UIStatusBarStyle = .default {
                                  didSet(newValue) {
                                      UIView.animate(withDuration: 0.1) {
                                          self.setNeedsStatusBarAppearanceUpdate()
                                      }
                                  }
                              }
                          
                              override var preferredStatusBarStyle: UIStatusBarStyle {
                                  return vcStatusbarStyle
                              }
                          

                          更新属性statusBarHiddenvcStatusBarStyle 时,它将调用setNeedsStatusBarAppearanceUpdate() 并使用prefersStatusBarHiddenpreferredStatusBarStyle 的新值更新状态栏。在我的情况下,我必须为容器视图控制器更新这些属性,这是可见子视图控制器的父级。我使用一个简单的委托方法做到了这一点。

                          protocol MainViewControllerDelegate {
                              func updateStatusBarStyle(statBarStayle: UIStatusBarStyle)
                              func toggleStatusBar(visable: Bool)
                          }
                          

                          当然,在实例化 childViewController(Visible VC) 时不要忘记将 MainViewcontroller(Container VC) 设置为其委托。我有时会。 :)

                          childViewController.delegate = self
                          

                          然后在 childViewController 中,我只是在需要更新状态栏时调用了委托方法。

                          self.delegate?.updateStatusBarStyle(statBarStayle: .default)
                          

                          如上所述,Graig Grummitt 详细介绍了此解决方案以及 UINavigationControllers 的使用。链接在这里:The Mysterious Case of the Status Bar

                          【讨论】:

                            【解决方案28】:

                            有两种情况:

                            1.显示导航栏

                            1) 将1UIViewControllerBasedStatusBarAppearance / View controller-based status bar appearance 添加到您的info.plist,设置值为true

                            2) 覆盖自定义 NavigationController 类中的 preferredStatusBarStyle 属性:(来自@guillama)

                            class NavigationController : UINavigationController {
                            
                                override var preferredStatusBarStyle : UIStatusBarStyle {
                            
                                if let topVC = viewControllers.last {
                                    //return the status property of each VC, look at step 2
                                    return topVC.preferredStatusBarStyle  
                                }
                                    return .default
                                }
                            

                            3) 在您的特定视图控制器中覆盖 preferredStatusBarStyle

                            override var preferredStatusBarStyle : UIStatusBarStyle {
                                return .lightContent
                            }
                            

                            2.隐藏导航栏

                            1) 同上

                            2) 上面第二步不需要,直接执行第三步。

                            override var preferredStatusBarStyle : UIStatusBarStyle {
                                return .lightContent
                            }
                            

                            【讨论】:

                              【解决方案29】:

                              点击支持文件组(左上角 - 您的项目名称)。导航到信息。在列表之间的某处单击 +,例如下面的捆绑包名称。并添加“查看基于控制器的状态栏外观”并将其设置为 NO。 然后打开 AppDelegate.swift 修改如下:

                              func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {
                              
                              UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
                              
                              return true
                              }
                              

                              就是这样。

                              【讨论】:

                              • 你读错了问题。我询问了如何更改特定视图控制器的 StatusBarStyle,而不是完整的应用程序。
                              • 在@Anuj下方查看我的答案
                              【解决方案30】:

                              对于 Xcode 10,您可以创建一个类并将其放在 viewController 类之前,您可以在所有需要轻量内容状态栏的视图控制器中调用该类...

                              class UIViewControllerWithLightStatusBar: UIViewController {
                              override var preferredStatusBarStyle: UIStatusBarStyle {
                              return UIStatusBarStyle.lightContent
                              }
                              }
                              

                              现在更改您的 viewController 类:

                              class YourViewController: UIViewControllerWithLightStatusBar {
                              ...
                              }
                              

                              仅此而已……

                              【讨论】:

                                猜你喜欢
                                • 2020-01-16
                                • 1970-01-01
                                • 2015-09-29
                                • 2020-02-04
                                • 1970-01-01
                                • 2016-11-04
                                • 2018-08-27
                                • 1970-01-01
                                相关资源
                                最近更新 更多