更改状态栏背景颜色和首选状态栏样式的最佳方法应该是什么?



我的要求是,在我的应用程序中有两个流,所以对于这两个流,preferredStatusBarStyle和StatusBar背景颜色的值是不同的。因此,如果我有 40 个viewControllers,则 20 个 VC 具有相同的值,20 个 VC 的值与前 20 个值不同。

现在,我正在更改每个视图控制器中的值,如下所示:-

override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
override func viewDidLoad() {
super.viewDidLoad()
UIApplication.shared.statusBarView?.backgroundColor = AppColors.themeStatusColor
}

在 info.plist 中,我这样做了:-

<key>UIViewControllerBasedStatusBarAppearance</key>
<true/>

你们能告诉我什么方法,这样我就可以只写两行代码,我可以达到我的要求。

class BaseVCBlue: UIViewController {
override var preferredStatusBarStyle: UIStatusBarStyle {
return UIStatusBarStyle.default
}
override func viewDidLoad() {
super.viewDidLoad()
self.setNeedsStatusBarAppearanceUpdate()
UIApplication.shared.statusBarView?.backgroundColor = UIColor.white
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.setNeedsStatusBarAppearanceUpdate()
}
}

class BaseVc: UIViewController {
override var preferredStatusBarStyle: UIStatusBarStyle {
return UIStatusBarStyle.lightContent
}
override func viewDidLoad() {
super.viewDidLoad()
UIApplication.shared.statusBarView?.backgroundColor = AppColors.themeStatusColor
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.setNeedsStatusBarAppearanceUpdate()
}

但最重要的是: 有一种情况是这不起作用,那就是如果您的控制器嵌入在 导航堆栈 😒 .原因是iOS希望父控制器(而不是子控制器(决定需要显示哪种状态栏,然后也这样做:-

extension UINavigationController {
open override var preferredStatusBarStyle: UIStatusBarStyle {
return topViewController?.preferredStatusBarStyle ?? .default
}
}

现在您可以轻松更改,这将完美地工作:)

您可以通过创建两个视图控制器来实现此目的,如下所示:

对于 20 个带有蓝色状态栏的 VC

class BaseVCBlue: UIViewController {
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
override func viewDidLoad() {
super.viewDidLoad()
UIApplication.shared.statusBarView?.backgroundColor = UIColor.blue
}

对于 20 个带有红色状态栏的 VC

class BaseVCRed: UIViewController {
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
override func viewDidLoad() {
super.viewDidLoad()
UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
}

当您需要蓝色状态栏时,请扩展蓝色,当您需要红色时,请扩展红色。

创建基本视图控制器(根(并扩展它。

class BaseViewController: UIViewController {
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
override func viewDidLoad() {
super.viewDidLoad()
UIApplication.shared.statusBarView?.backgroundColor = AppColors.themeStatusColor
}
}

用:

class MYSecondFlowController: BaseViewController {
}

相关内容

最新更新