我的需求就像,在我的应用程序中有两个流,因此对于这两个流,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/>
你们能以任何方式告诉我,所以我可以仅在两个地方写这些代码行,就可以达到我的要求。
答案 0 :(得分:1)
创建基本视图控制器(根)并对其进行扩展。
[
{
"Name":"Bell",
"Class":"BWB0",
"Lv":31,
"Kill":0,
"Serial":3,
"PvpPoint":0,
"Death":0
},
{
"Name":"Perkss",
"Class":"AWB0",
"Lv":17,
"Kill":0,
"Serial":6,
"PvpPoint":2400,
"Death":0
},
{
"Name":"1233",
"Class":"BWB0",
"Lv":3,
"Kill":0,
"Serial":1,
"PvpPoint":0,
"Death":0
},
{
"Name":"Cora",
"Class":"CWB0",
"Lv":1,
"Kill":0,
"Serial":4,
"PvpPoint":0,
"Death":0
}
]
使用:
class BaseViewController: UIViewController {
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
override func viewDidLoad() {
super.viewDidLoad()
UIApplication.shared.statusBarView?.backgroundColor = AppColors.themeStatusColor
}
}
答案 1 :(得分:1)
您可以通过创建两个如下所示的ViewController来实现此目的:
//对于带有蓝色状态栏的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
}
当您需要蓝色状态栏时,将其扩展为蓝色,当您希望红色状态时,将其扩展为红色。
答案 2 :(得分:1)
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
}
}
现在,您可以轻松更改,并且可以完美运行:)