swift-在Swift 3中删除了preferredStatusBarStyle吗?

所以我最近才更新到Xcode 8,下面的代码也出现了这个错误。

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

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

enter image description here

我非常感谢您的帮助,谢谢!

Amit Kalra asked 2020-06-25T05:03:38Z
2个解决方案
141 votes

在iOS 10中,UIViewControllerBasedStatusBarAppearance是属性,而不是方法。 因此,与其像您那样用UIViewControllerBasedStatusBarAppearance声明覆盖它,不如用var声明覆盖吸气剂:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

Swift编译器在此处的错误消息可能会更好-因为似乎知道您的重写功能应该包含一个属性,因此它可能会作为修复程序来提供。 我建议向Swift开源提交错误。


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

rickster answered 2020-06-25T05:04:01Z
5 votes

iOS 10.0 API差异显示已删除UIViewController.preferredStatusBarStyle() -> UIStatusBarStyle方法,并添加了preferredStatusBarStyle属性。


以类似的方式,使用Xcode 8,可以右键单击代码中的任何preferredStatusBarStyle,选择“跳转到定义”,然后搜索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
}
Imanou Petit answered 2020-06-25T05:04:35Z
translate from https://stackoverflow.com:/questions/38862208/preferredstatusbarstyle-removed-in-swift-3