gpt4 book ai didi

ios - 更改 StatusBar 背景颜色和 preferredStatusBarStyle 的最佳方法应该是什么?

转载 作者:行者123 更新时间:2023-11-28 10:37:19 26 4
gpt4 key购买 nike

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

现在我正在改变每个 View Controller 中的值,像这样:-

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()
}

但最重要的是:-在一种情况下这是行不通的,那就是如果您的 Controller 嵌入在导航堆栈中😒。原因是 iOS 希望父 Controller (而不是子 Controller )决定需要显示哪种状态栏,然后也这样做:-

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

现在你可以很容易地改变,这将完美地工作:)

关于ios - 更改 StatusBar 背景颜色和 preferredStatusBarStyle 的最佳方法应该是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52752895/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com