在Swift 3中删除了preferredStatusBarStyle?

时间:2016-08-09 23:54:00

标签: swift3 xcode8 xcode8-beta4

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

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

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

enter image description here

我非常感谢帮助,谢谢!

2 个答案:

答案 0 :(得分:137)

在iOS 10中,preferredStatusBarStyle是属性,而不是方法。因此,您不必使用func声明覆盖它,而是使用var声明覆盖getter:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

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

注意:在iOS 12中,您可能还需要在Info.plist中设置UIViewControllerBasedStatusBarAppearance(又名"基于视图控制器的状态栏外观")标志。并检查视图控制器层次结构,因为容器视图控制器(如导航和拆分视图)可能不会从其子项传播此视图。

答案 1 :(得分:5)

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

以类似的方式,使用Xcode 8,您可以在代码中的任何UIViewController右键单击,选择跳转到定义,然后执行搜索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
}