如何更改状态栏颜色?
Posted
技术标签:
【中文标题】如何更改状态栏颜色?【英文标题】:How to change status bar color? 【发布时间】:2020-09-23 13:34:40 【问题描述】:在我的应用程序中,我使用图像作为ViewController's
的背景。对于我设置的项目设置中的状态栏:Status Bar Style - Default
。我没有为状态栏使用其他任何东西。
问题是当启用 ios 暗模式时,我的 status bar
会变白。我需要它保持黑色。如何解决?
我也不想关闭应用程序中支持的 iOS 暗/亮模式。所以Info.plist
中的Appearance Light 不太适合我。
【问题讨论】:
【参考方案1】:将您的状态栏样式设置为深色内容:
然后添加您的 info.plist 查看基于控制器的状态栏外观并将其设置为 NO
更新
如果您只想在确定的控制器中添加深色内容,请在 viewWillAppear 中添加 setNeedsStatusBarAppearanceUpdate ,然后覆盖首选状态栏样式:
override func viewWillAppear(_ animated: Bool)
super.viewWillAppear(animated)
setNeedsStatusBarAppearanceUpdate()
override var preferredStatusBarStyle: UIStatusBarStyle
if #available(iOS 13.0, *)
return .darkContent
else
return .default
从导航控制器开始:
在您的场景委托中声明您的第一个导航控制器:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions)
// Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
// If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
// This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
guard let windowScene = (scene as? UIWindowScene) else return
window = UIWindow(windowScene: windowScene)
window?.makeKeyAndVisible()
let controller = UINavigationController(rootViewController: FirstViewController())
controller.navigationBar.barStyle = .black
window?.rootViewController = controller
在 SecondViewController 中覆盖状态栏样式
override var preferredStatusBarStyle: UIStatusBarStyle
if #available(iOS 13.0, *)
return .darkContent
else
return .default
【讨论】:
在某些控制器中我需要白色。因为如果我使用你的答案,我有这个 - ibb.co/Dfy3Cd0 我更新了我的答案......如果我的答案满足你的问题,请用正确的答案检查它并投票...... 你不需要这个 if 语句,但如果你想在 else 语句中添加 return .default 我需要它,因为应用程序支持 iOS 12。但是,如果我使用 iOS 13 支持并使用您的代码,状态栏颜色不会改变。我正在使用断点并检查未调用“preferredStatusBarStyle”。我不知道为什么... 谢谢,这解决了我的问题!【参考方案2】:对于每个ViewController
,您可以使用简单的覆盖方法设置状态栏颜色。
override var preferredStatusBarStyle: UIStatusBarStyle
if #available(iOS 13, *)
return .darkContent
else
return .default
不要忘记在 Info.plist 中将 View controller-based status bar appearance 设置为 YES。
【讨论】:
以上是关于如何更改状态栏颜色?的主要内容,如果未能解决你的问题,请参考以下文章