UIStatusBarStyle无法在Swift中运行

时间:2014-06-16 00:47:07

标签: ios swift appdelegate uistatusbar xcode6

我正在尝试将我的Swift应用中的状态栏颜色更改为白色,但是我正在撞墙。我有3个ViewControllers,每个都嵌入在NavigationController中(可能是问题吗?我已经尝试将代码放在NavigationController类中。)我在AppDelegate的didFinishLaunchingWithOptions中尝试了以下两段代码。 .swift文件,但都没有。

application.statusBarStyle = .LightContent

UIApplication.sharedApplication().statusBarStyle = .LightContent

Docs所说的所有内容都是UIBarButtonStyle是一个Int并且给了我这个enum片段,它根本没有帮助我。

enum UIStatusBarStyle : Int {
    case Default
    case LightContent
    case BlackOpaque
}

我错过了什么?

10 个答案:

答案 0 :(得分:144)

您有两种选择。

如果您想继续手动设置状态栏的样式,请继续执行您正在执行的操作,但是您需要将以下键添加到info.plist文件中,其值为NO

  

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

或者,如果要继续使用基于视图控制器的状态栏外观,而不是设置应用程序的statusBarStyle,请覆盖您要为其指定状态栏样式的每个视图控制器中的preferredStatusBarStyle属性

Swift 3

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

Swift 2

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

答案 1 :(得分:142)

  

Swift 3.0

在AppDelegate.swift中的

didFinishLaunchingWithOptions

Conversion[AutoA, AutoC]

的Info.plist

UIApplication.shared.statusBarStyle = .lightContent
  

Swift 2.2

在AppDelegate.swift中的

didFinishLaunchingWithOptions

View controller-based status bar appearance -> NO

的Info.plist

UIApplication.sharedApplication().statusBarStyle = .LightContent

答案 2 :(得分:29)

您必须设置:

navigationController.navigationBar.barStyle = .black

,文字将以白色显示

答案 3 :(得分:20)

对于iOS9.x和Xcode7,只需将其放在AppDelegate.swift

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    UINavigationBar.appearance().barStyle = .Black

} 

对于UINavigationController中的所有视图控制器,这将自动将状态栏的样式转换为.Lightcontent

(另外,从Info.plist中删除View controller-based status bar appearance以禁止您可能也会看到警告!)

答案 4 :(得分:15)

在Swift 3中,状态栏样式已更改为UIViewController中的计算属性,您可以像这样覆盖:

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

答案 5 :(得分:12)

在iOS 9上,不推荐使用以下(setStatusBarStyle),如果你这样做,你会收到警告。

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

如果您希望一次性更改所有statusBars,请尝试将以下内容添加到Info.plist中。这也会使您的启动屏幕状态栏变白。虽然上面的代码不会。

<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

答案 6 :(得分:9)

对我而言,直到我补充说:

self.navigationController?.navigationBar.barStyle = .black;

这样:

  1. UIViewControllerBasedStatusBarAppearance
  2. 中将YES设为.plist
  3. viewDidLoad致电self.setNeedsStatusBarAppearanceUpdate();
  4. 覆盖preferredStatusBarStyle
    override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
  5. 在覆盖的方法中,我也设置了navigationBar.barStyle所以最终
    light 内容:
    override var preferredStatusBarStyle: UIStatusBarStyle { self.navigationController?.navigationBar.barStyle = .black;//or default return .lightContent //or default }
    对于黑色内容使用默认
  6. 来自herehere的来源。

    如果这不起作用,您可以尝试添加UINavigationController extension

    extension UINavigationController
    {
        override open var preferredStatusBarStyle: UIStatusBarStyle {
            if let lastVC = self.viewControllers.last
            {
                return lastVC.preferredStatusBarStyle
            }
    
            return .default
        }
    }
    

答案 7 :(得分:5)

奇怪,使用Swift 3.1&amp; XC8.2.1,但以上所有都不起作用。

我做了什么,只是

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

没有Plist,没有其​​他东西。 HTH

答案 8 :(得分:2)

在Swift 3.0中,您可以在ViewController中覆盖基于View控制器的状态栏外观的getter:

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

答案 9 :(得分:1)

不要编辑您的Info.plist。将其添加到ViewController.swift:

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