Swift 3 中删除了 preferredStatusBarStyle?

preferredStatusBarStyle removed in Swift 3?

所以我最近刚更新到 Xcode 8,我刚收到以下代码的错误。

错误是该方法没有覆盖其超类中的任何方法。

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

非常感谢帮助,谢谢!

在iOS10中,preferredStatusBarStyle是一个属性,不是方法。因此,不是像您所做的那样用 func 声明覆盖它,而是用 var 声明覆盖 getter:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

这里 Swift 编译器的错误消息可能会更好 — 因为它似乎知道您的覆盖函数应该覆盖 属性,它可能会提供它作为修复。我推荐 filing a bug to Swift open source


注意:在 iOS 12 中,您可能还需要在 Info.plist 中设置 UIViewControllerBasedStatusBarAppearance(又名 "View controller-based status bar appearance")标志。并检查您的视图控制器层次结构,因为像导航和拆分视图这样的容器视图控制器可能不会从它们的子级传播。

iOS 10.0 API Diffs 显示 UIViewController.preferredStatusBarStyle() -> UIStatusBarStyle 方法已被 删除 并且 UIViewController.preferredStatusBarStyle 属性 已被 已添加.


以类似的方式,使用Xcode 8,您可以右键单击代码中的任何UIViewController,select 跳转到定义,然后搜索preferredStatusBarStyle。您会发现 preferredStatusBarStyle 现在有以下声明:

@available(iOS 7.0, *)
open var preferredStatusBarStyle: UIStatusBarStyle { get }

因此,以下代码片段显示了如何用 Xcode 8 / Swift 3 覆盖 preferredStatusBarStyle

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

或者,以更短且更受欢迎的样式:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}