Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 是否在AppDelegate中设置状态栏?_Swift_Xcode_Statusbar_Appdelegate - Fatal编程技术网

Swift 是否在AppDelegate中设置状态栏?

Swift 是否在AppDelegate中设置状态栏?,swift,xcode,statusbar,appdelegate,Swift,Xcode,Statusbar,Appdelegate,以前,我有这个代码,它在Swift更新之前工作得很好。现在它说: iOS 9.0中不推荐使用“statusBarStyle”的Setter:Use-[UIViewController preferredStatusBarStyle] 现在,我了解到您必须覆盖statusBarStyle,但我不想在每个UIViewController中手动执行此操作,而是通过UIApplication的结构和扩展来控制它。但我不知道该怎么做 代码: extension UIApplication { va

以前,我有这个代码,它在Swift更新之前工作得很好。现在它说:

iOS 9.0中不推荐使用“statusBarStyle”的Setter:Use-[UIViewController preferredStatusBarStyle]

现在,我了解到您必须覆盖
statusBarStyle
,但我不想在每个
UIViewController
中手动执行此操作,而是通过
UIApplication
结构和
扩展来控制它。但我不知道该怎么做

代码:

extension UIApplication {
    var statusBarView: UIView? {
        return value(forKey: "statusBar") as? UIView
    }
}


struct StatusBar {

    static func setStatusBar() {
        let appDelegate = UIApplication.shared.delegate as? AppDelegate
        if let currentVC = appDelegate?.window?.rootViewController?.getCurrentlyDisplayedVC() {
            if currentVC is LoginVC || currentVC is SignUpVC || currentVC is SignUpVC {
                UIApplication.shared.statusBarView?.backgroundColor = .clear
            }
            else {
                UIApplication.shared.statusBarView?.backgroundColor = Colors.mainBlueColor
            }
        }
        UIApplication.shared.statusBarStyle = .lightContent
    }
}



extension UIViewController {

    func getCurrentlyDisplayedVC() -> UIViewController {

        if let presentedVC = presentedViewController {
            return presentedVC.getCurrentlyDisplayedVC()
        }
        else if let split = self as? UISplitViewController, let last = split.viewControllers.last {
            return last.getCurrentlyDisplayedVC()
        }
        else if let nav = self as? UINavigationController, let top = nav.topViewController {
            return top.getCurrentlyDisplayedVC()
        }
        else if let tab = self as? UITabBarController {

            if let selected = tab.selectedViewController {
                return selected.getCurrentlyDisplayedVC()
            }
        }
        return self
    }
}