48

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

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

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

在此处输入图像描述

我真的很感激帮助,谢谢!

4

2 回答 2

146

在 iOS 10 中,preferredStatusBarStyle是属性,而不是方法。因此,不要func像你所做的那样用声明覆盖它,而是用声明覆盖 getter var

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

这里的 Swift 编译器的错误消息可能会更好——因为它似乎知道你的 override func 应该覆盖一个属性,它可能会提供它作为修复它。我建议向 Swift open source 提交一个错误


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

于 2016-08-10T05:18:35.600 回答
7

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


以类似的方式,使用 Xcode 8,您可以right-click在代码中的任何地方UIViewController,选择Jump to Definition然后执行搜索preferredStatusBarStyle. 您会发现preferredStatusBarStyle现在有以下声明:

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

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

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

或者,以更短和更喜欢的风格:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}
于 2016-11-25T13:37:27.017 回答