在Swift 3中删除了preferredStatusBarStyle?

Ami*_*lra 46 swift3 xcode8 xcode8-beta4

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

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

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return UIStatusBarStyle.lightContent
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我非常感谢帮助,谢谢!

ric*_*ter 142

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

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}
Run Code Online (Sandbox Code Playgroud)

这里的Swift编译器的错误信息可能会更好 - 因为它似乎知道你的覆盖func应该覆盖一个属性,它可能提供它作为修复它.我建议向Swift开源提交一个bug.


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

  • 这似乎不适用于iOS 12和Swift 4.任何想法?我没有收到任何错误,但状态栏也没有改变. (6认同)
  • 您还需要:self.setNeedsStatusBarAppearanceUpdate() (2认同)

Ima*_*tit 5

所述的iOS 10.0 API的diff表明UIViewController.preferredStatusBarStyle() -> UIStatusBarStyle方法已被移除并且该UIViewController.preferredStatusBarStyle属性已被加入.


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

@available(iOS 7.0, *)
open var preferredStatusBarStyle: UIStatusBarStyle { get }
Run Code Online (Sandbox Code Playgroud)

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

override var preferredStatusBarStyle: UIStatusBarStyle {
    get {
        return .lightContent
    }
}
Run Code Online (Sandbox Code Playgroud)

或者,在更短和更首选的风格:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}
Run Code Online (Sandbox Code Playgroud)