所以我最近刚刚更新到Xcode 8,我刚刚收到以下代码的错误。
错误是该方法不会覆盖其超类中的任何方法。
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.lightContent
}
我非常感谢帮助,谢谢!
答案 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
}