如何在iOS13上设置导航控制器中嵌入的状态栏的样式?

人气:123 发布:2023-01-03 标签: ios swift statusbar uinavigationcontroller ios13

问题描述

像许多iOS开发者一样,我面临着iOS 13更新的一些问题。 其中之一是对状态栏样式的不同管理

在iOS 12上,我过去常常这样设置导航栏样式

self.navigationController?.navigationBar.barStyle = .black

这会影响状态栏样式,将其设置为白色(因为导航栏样式为黑色); 但它在iOS 13上似乎不起作用,我猜它有一些问题要处理

UINavigationBarAppearance() 

我对每个视图控制器的导航栏配置如下:

if #available(iOS 13.0, *) {
            let navBarAppearance = UINavigationBarAppearance()
            navBarAppearance.configureWithOpaqueBackground()
            navBarAppearance.accessibilityTextualContext = .sourceCode
            navBarAppearance.titleTextAttributes = [.foregroundColor: UIColor.white]
            navBarAppearance.largeTitleTextAttributes = [.foregroundColor: UIColor.white]
            navBarAppearance.backgroundColor = .brownCircles
            navBarAppearance.shadowImage = nil // remove navigationBar Bottom border
            navBarAppearance.shadowColor = nil // remove navigationBar Bottom border

            self.navigationController?.navigationBar.standardAppearance = navBarAppearance
            self.navigationController?.navigationBar.compactAppearance = navBarAppearance
            self.navigationController?.navigationBar.scrollEdgeAppearance = navBarAppearance

        } else {
            self.navigationController?.navigationBar.barTintColor = .blue
            self.navigationItem.title = NSLocalizedString(kTitle, comment: kTitle.capitalized)
        }
self.navigationController?.navigationBar.barStyle = .black

到目前为止还不错,但

self.navigationController?.navigationBar.barStyle = .black

只在iOS 12上运行,iOS 13上没有任何反应状态栏仍然显示为黑色而不是白色

有人遇到过这个问题吗?

推荐答案

我终于想明白了!

设置灯光状态栏文本的魔术代码是:

 self.navigationController?.navigationBar.overrideUserInterfaceStyle = .dark

当然,如果您要更改为深色文本,我必须将其设置为.light。

注意事项:

此代码:

if #available(iOS 13.0, *) {
    overrideUserInterfaceStyle = .dark
}

虽然它应该将整个视图和子视图设置为黑色,但似乎不会影响状态栏。

您还可以使用:

UIApplication.shared.statusBarStyle = UIStatusBarStyle.lightContent

但当然不推荐使用,所以我建议使用其他方法

您仍需要:

19