热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

如何通过darkModeiOS13禁用更改statusBartextColor

如何解决《如何通过darkModeiOS13禁用更改statusBartextColor》经验,为你挑选了2个好方法。

我将whilebackgroundColor NavigationBardarktextColor用于statusBar,但是当用户将主题iOS更改为深色时,我的textColor statusBar更改为while,而while我的backgroundColor上NavigationBar则看不到任何东西。如何为我的应用禁用此更改?



1> Andrew Kirna..:

iOS 13解决方案

UINavigationControllerUIViewController(谁知道的)的子类!

因此,在呈现嵌入在导航控制器中的视图控制器时,您并不是真正在呈现嵌入式视图控制器。您正在展示导航控制器!UINavigationController,作为的子类UIViewController继承preferredStatusBarStylechildForStatusBarStyle,您可以根据需要设置。

以下任何一种方法都可以工作:

    完全退出黑暗模式

    在中info.plist,添加以下属性:

    键- UIUserInterfaceStyle(又名“用户界面样式”)

    价值-轻

    preferredStatusBarStyle在内部覆盖UINavigationController

    preferredStatusBarStyle(doc)-视图控制器的首选状态栏样式

    子类或扩展 UINavigationController

    class MyNavigationController: UINavigationController {
        override var preferredStatusBarStyle: UIStatusBarStyle {
            .lightContent
        }
    }
    

    要么

    extension UINavigationController {
        open override var preferredStatusBarStyle: UIStatusBarStyle {
            .lightContent
        }
    }
    

    childForStatusBarStyle在内部覆盖UINavigationController

    childForStatusBarStyle(doc)-在系统需要视图控制器来确定状态栏样式时调用

    根据Apple的文件,

    “如果您的容器视图控制器从其子视图控制器之一派生其状态栏样式,请[覆盖此属性]并返回该子视图控制器。如果您返回nil或不重写此方法,则使用self的状态栏样式如果此方法的返回值发生更改,请调用setNeedsStatusBarAppearanceUpdate()方法。”

    换句话说,如果您未在此处实现解决方案3,则系统将退回到上述解决方案2。

    子类或扩展 UINavigationController

    class MyNavigationController: UINavigationController {
        override var childForStatusBarStyle: UIViewController? {
            topViewController
        }
    }
    

    要么

    extension UINavigationController {    
        open override var childForStatusBarStyle: UIViewController? {
            topViewController
        }
    }
    

    您可以返回上面想要的任何视图控制器。我建议以下之一:

    topViewController(of UINavigationController)(doc)-导航堆栈顶部的视图控制器

    visibleViewController(of UINavigationController)(doc)-与导航界面中当前可见视图相关联的视图控制器(提示:这可以包括“以模态形式显示在导航控制器本身顶部的视图控制器”)

注意:如果决定子类化UINavigationController,请记住通过IB中的身份检查器将该类应用于导航控制器。

PS我的代码使用Swift 5.1语法



2> Frank Schleg..:

如果您将UIViewControllerBasedStatusBarAppearance应用程序的密钥设置info.plistYES,则可以在当前显示的视图控制器中覆盖状态栏样式:

override var preferredStatusBarStyle: UIStatusBarStyle {
    if #available(iOS 13, *) {
        return .darkContent
    } else {
        return .default
    }
}


推荐阅读
author-avatar
黄于諭春琪
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有