覆盖 UIViewConrtoller 扩展中的 preferredStatusBarStyle
Posted
技术标签:
【中文标题】覆盖 UIViewConrtoller 扩展中的 preferredStatusBarStyle【英文标题】:override preferredStatusBarStyle in UIViewConrtoller extension 【发布时间】:2017-03-03 14:40:14 【问题描述】:我想在UIViewController
的扩展中覆盖preferredStatusBarStyle
,如下所示:
extension UIViewController
open override var preferredStatusBarStyle: UIStatusBarStyle
return .lightContent
编译器抛出此错误Getter for 'preferredStatusBarStyle' with Objective-C selector 'preferredStatusBarStyle' conflicts with method 'preferredStatusBarStyle()' with the same Objective-C selector
将相同的覆盖应用于UINavigationController
而不是UIViewController
有效;但preferredStatusBarStyle 是一个由UIViewController 继承的var。
-> 为什么可以将此扩展应用到UINavigationController
而不能应用到UIViewController
【问题讨论】:
【参考方案1】:您不能通过 Swift 中的扩展在引入该属性的类上以这种方式覆盖(重新声明实现)已实现的属性。
您绝对应该创建一个UIViewController
子类并在应用程序范围内使用它。
不过,有一个选项。您可以使用 Objective-C 通过提供扩展类别来覆盖它,适用于 UIFont
的类似内容在这里回答:Is there a way to change default font for your application。但是,这样做并不完全安全,如果不够小心,您应该预料到独角兽会来。
【讨论】:
谢谢米奇。我不喜欢拥有 UIViewController 的自定义基类的想法,因此我必须一次又一次地在每个 UIViewController 类中实现它...... 不,你不会,你需要做的就是从MyBaseViewController
而不是UIViewController
继承所有其他控制器,并在你的MyBaseViewController
中实现通用的东西。这可能是推荐的方式。
当我说“我不喜欢拥有自定义 UIViewController 基类的想法”时,这正是我的想法以上是关于覆盖 UIViewConrtoller 扩展中的 preferredStatusBarStyle的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Container 中垂直扩展 TextField 以覆盖 Flutter 中的所有可用空间