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

How to set style of the statusbar embedded in a navigation controller on iOS13?(如何在iOS13上设置导航控制器中嵌入的状态栏的样式?)
本文介绍了如何在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

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

  • 您仍需要:

    <<2-1]>, 但请将其放在UINavigationBarPresance()设置之后,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

希望能有所帮助!;)

这篇关于如何在iOS13上设置导航控制器中嵌入的状态栏的样式?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Why local notification is not firing for UNCalendarNotificationTrigger(为什么没有为UNCalendarNotificationTrigger触发本地通知)
iOS VoiceOver functionality changes with Bundle Identifier(IOS画外音功能随捆绑包标识符而变化)
tabbar middle tab out of tabbar corner(选项卡栏中间的选项卡角外)
Pushing UIViewController above UITabBar(将UIView控制器推送到UITabBar上方)
Dropbox Files.download does not start when number of files in folder is gt; 1000(当文件夹中的文件数为1000时,Dropbox Files.Download不会启动)
How can I sync two flatList scroll position in react native(如何在本机Reaction中同步两个平面列表滚动位置)