UIViewController 的扩展不工作更改 UIStatusBarStyle In Swift

extension for UIViewController is not Working change UIStatusBarStyle In Swift

我正在尝试为 UIViewController 创建 extension 但它不起作用。我正在更改状态栏颜色以使用扩展程序,但我无法获得成功。但是没有扩展是有效的。我是 Extension 的新手,请帮助我。 我的目标是 我不想在每个视图控制器上创建功能,减少可重用性 创建扩展程序无效

extension UIViewController {

     func preferredStatusBarStyle_change() -> UIStatusBarStyle {
        return UIStatusBarStyle.LightContent
    }
}
//!!!!!!!!!view1
override func viewDidLoad() {
        super.viewDidLoad()
        //preferredStatusBarStyle();
        self.preferredStatusBarStyle_change();
    }
//!!!!!!!!!view2
override func viewDidLoad() {
        super.viewDidLoad()
        //preferredStatusBarStyle();
        self.preferredStatusBarStyle_change();
    }

没有扩展是工作

View1
override func viewDidLoad() {
                super.viewDidLoad()
                preferredStatusBarStyle();
            }
override func preferredStatusBarStyle() -> UIStatusBarStyle {
            return UIStatusBarStyle.LightContent
        } 
View2

     override func viewDidLoad() {
                super.viewDidLoad()
                preferredStatusBarStyle();
            }

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

帮助我尝试理解可重用性和扩展

它不起作用,因为:

Viewcontroller 将调用 preferredStatusBarStyle() 来定义 statusbar。实际上你在 viewDidload 中删除了 preferredStatusBarStyle();,你的控制器仍然有效。

所以在你的情况下你可以这样解决:

你创建了一个 UIViewController 的子class,也许它的名字是:BaseViewController 并且它这个 class 你把:

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

现在您从 BaseViewController 状态栏继承的所有 ViewController 将始终 .LightContent 您不需要将此代码放在每个位置之上。

演示:Demo