当前位置: 首页 > 知识库问答 >
问题:

如何防止iOS 13的黑暗模式改变应用程序状态栏中的文本颜色?

嵇光临
2023-03-14

我的导航栏有白色BackgroundColor,而我的状态栏使用DarkTextColor。当用户将iOS主题更改为暗模式时,状态栏将更改为白色背景上的白色文本。结果我什么也看不见。如何禁用应用程序的此更改?

共有1个答案

吕高雅
2023-03-14

UinavigationControllerUiviewController的子类!(谁知道)

因此,当显示导航控制器中嵌入的视图控制器时,您并不是真正显示嵌入的视图控制器;你在展示导航控制器!UinavigationController作为UiviewController的子类,继承PreferredStatusBarstyleChildforStatusBarstyle,您可以根据需要设置它们。

以下任何一种方法都应该有效:

    null

UinavigationController中重写PreferredStatusBarStyle

>

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

    子类 或扩展 UinAvigationController

      class MyNavigationController: UINavigationController {
          override var preferredStatusBarStyle: UIStatusBarStyle {
              .lightContent
          }
      }
    
      extension UINavigationController {
          open override var preferredStatusBarStyle: UIStatusBarStyle {
              .lightContent
          }
      }
    
    • ChildForStatusBarStyle(doc)-当系统需要视图控制器用于确定状态栏样式时调用
    • 根据Apple的文档,

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

    >

  • 换句话说,如果不在这里实现解决方案3,系统将回到上面的解决方案2。

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

    您可以在上面返回任何您想要的视图控制器。我推荐以下其中之一:

    • TopViewController(UinavigationController)(doc)-导航堆栈顶部的视图控制器
    • visibleviewController(ofuinavigationController)(doc)-与导航界面中当前可见视图关联的视图控制器(提示:这可以包括“以模式显示在导航控制器自身顶部的视图控制器”)

    注意:如果您决定子类UinavigationController,请记住通过IB中的标识检查器将该类应用于导航控制器。

  •  类似资料:
    • 如何更改iPhone应用程序中标题部分(状态栏)的颜色。带有载体、时间和电池的部件。 这部分 更具体地说,这一部分。我想将UI从黑色改为白色或更容易看到的颜色。

    • 我正在尝试将系统状态栏的颜色更改为黑色。配置似乎被AppBar类覆盖。我可以通过在创建材料应用程序时将主题分配给,然后指定一个来实现我想要的。但是我不想要AppBar,而且,这样做会改变所有字体的颜色。 一种可能的解决方案是继承主题数据。将bright()添加到一个新类中,然后通过 然后我需要指定AppBar并以某种方式使其不可见? 文档 主要的飞奔 布局工具。飞奔

    • 问题内容: 我想更改状态栏的颜色以匹配我的应用背景,该怎么办? 问题答案: 可以通过将CNS项目目录下的colors.xml文件包含以下示例内容来实现: 在这种情况下,colorPrimaryDark是您要为状态栏着色的颜色

    • 当我打开黑暗模式时,ImageView中的图像会从颜色变为白色。 我把一些croppe屏幕截图的图像,这样你就可以更好地理解。 我的图像在黑暗模式下是什么样子 当我打开黑暗模式时,图像的黑色变成了白色,白色变成了黑色。我该怎么办?

    • 关于这个话题有很多帖子,但我找不到一个有用的。 我有一个未嵌入导航控制器的视图控制器。我想把状态栏的颜色改成黑色。 如何在Swift 3中设置状态栏样式 改变行info.plist查看基于控制器的状态栏外观并将其设置为NO didFinishLaunchingwith Options中appDelegate.swift的更改

    • 问题内容: 我的应用程序具有深色背景,但是在iOS 7中状态栏变为透明的。所以我看不到任何东西,只有角落的绿色电池指示灯。如何将状态栏文本颜色更改为白色,就像在主屏幕上一样? 问题答案: 将要在文件的.plist。 在做一个 添加以下方法: { return UIStatusBarStyleLightContent; } 注意 :这不适用于内部控制器,请参阅下面的Tyson评论:) Swift 3