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

问题描述 投票:0回答:1

正如许多iOS开发人员那样,我在iOS 13更新方面面临一些问题。其中之一是状态栏样式的不同管理

在iOS 12上,我曾经这样设置导航栏样式

self.navigationController?.navigationBar.barStyle = .black

这会影响状态栏样式,将其设置为白色(因为导航栏样式为黑色);但它似乎无法在iOS 13上运行,我想它可以处理一些问题

UINavigationBarAppearance() 

我这样为每个ViewController配置了导航栏:

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上没有任何反应,状态栏看起来仍然是黑色而不是白色

有人遇到过这个问题吗?

ios swift uinavigationcontroller statusbar ios13
1个回答
0
投票

最后我想通了!

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

 self.navigationController?.navigationBar.overrideUserInterfaceStyle = .dark

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

一些注意事项:

  • 此代码:

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

    尽管应将整个视图和子视图设置为暗,但似乎不会影响状态栏。

  • 您也可以使用:

    UIApplication.shared.statusBarStyle = UIStatusBarStyle.lightContent

    但是当然已弃用,所以我建议其他方式

  • 您仍然需要:

    self.navigationController?.navigationBar.barStyle = .black但将其放在[[AFTER UINavigationBarAppearance()设置的self.navigationController?.navigationBar.overrideUserInterfaceStyle = .dark之后。

最终代码将如下所示:

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 self.navigationController?.navigationBar.overrideUserInterfaceStyle = .dark } else { self.navigationController?.navigationBar.barTintColor = .blue self.navigationItem.title = NSLocalizedString(kTitle, comment: kTitle.capitalized) } self.navigationController?.navigationBar.barStyle = .black

希望有帮助! ;)
© www.soinside.com 2019 - 2024. All rights reserved.