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

iOS 13设置UINavigationController中的状态栏文本颜色

邓崇凛
2023-03-14

所以在iOS 13之前,我正在设置NavigationController。导航栏。BarStyle可控制状态栏中文本的颜色。但是现在有了新的航空航天飞机,有没有办法控制它呢?我已经尝试覆盖preferedStatusBarStyle,并确保我的plist也包含该设置,但据我所知,如果您的视图控制器位于UINavigationController中,这是不荣幸的。

现在,对于iOS 13,我将使用UINavigationBarAppearance设置导航栏的外观,并设置标准外观和滚动外观。

我还试图设置NavigationController。导航栏。从BarStyle到UIBarStyle。黑色它第一次起作用,但由于某种原因,当我返回并再次导航到页面时,设置BarStyle不再有任何效果。

设置文本颜色的正确方法是什么?

共有3个答案

葛鸿熙
2023-03-14

Info中。plist,如果添加了布尔属性UIViewControllerBasedStatusBarAppearance,并将其值设置为False

<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

您可以通过以下方式更改StatusBar文本颜色:

UIApplication.SharedApplication.SetStatusBarStyle(UIStatusBarStyle.LightContent, true);

此外,此方法应在View完全加载后调用。在IOS 13中,Apple将UIController分开,这可能会影响Controller中PreferredStatusBarStyle的外观。在处理此问题之前,您可以使用UIApplication. SharedApplication. StatusBarStyle来设置它。

严永丰
2023-03-14

可以使用此扩展名更改状态栏文本颜色:

extension UIApplication {

    enum ColorMode {
        case dark, light, customColorLowerThanIOS13(_ color: UIColor)
    }

    func setStatusBarTextColor(_ mode: ColorMode) {
        if #available(iOS 13.0, *) {
            guard let appDelegate = delegate as? AppDelegate else { return }

            var style: UIUserInterfaceStyle

            switch mode {
                case .dark:
                    style = .dark
                default:
                    style = .light
            }

            appDelegate.window?.overrideUserInterfaceStyle = style
        } else {
            if let statusBar = UIApplication.shared.value(forKey: "statusBar") as? UIView {
                var color: UIColor

                switch mode {
                    case .dark:
                        color = .white
                    case .light:
                        color = .black
                    case .customColorLowerThanIOS13(let customColor):
                        color = customColor
                }

                statusBar.setValue(color, forKey: "foregroundColor")
            }
        }
    }

}

使用:

UIApplication.shared.setStatusBarTextColor(.dark)
UIApplication.shared.setStatusBarTextColor(.light)
UIApplication.shared.setStatusBarTextColor(.customColorLowerThanIOS13(.red))
林英朗
2023-03-14

酒吧风格在有限的条件下仍然有效。您可以使用barStyle或UIBarAppearance,但不能同时使用两者,如果使用大标题,则不能使用barStyle。

当然,你可以通过子类化UINavigationController来简单地解决这个问题。

override var childForStatusBarStyle : UIViewController? {
    return self.topViewController
}

不过,在iOS 13中,你需要做的是不使用状态栏样式,让它根据用户界面样式(亮或暗模式)自动更改。在亮模式下使用亮条颜色,在暗模式下使用暗条颜色,一切都会好起来。

 类似资料:
  • 第8条。1(xcode 6.1)我使用下面的方法来更改状态栏文本的颜色。 不调用链接preferredStatusBarStyle 但这对我不起作用。任何人都知道如何更改与uinavigationcontroller相关的状态栏颜色。

  • 如附图所示,状态栏文本为黑色。有没有办法换另一种颜色,比如白色?

  • 因此,我在这里读了几篇关于更改状态栏文本颜色的帖子,但都没用。所以我最初的问题是,状态栏现在在iOS7中是透明的,我希望它是带黑色文本的白色。所以我把它添加到我的viewcontroller中。 好的,现在状态是黑对黑,不能阅读文本,但至少它不是透明的。所以现在我做了下面的事情。 进入plist并添加了这个 然后我将此添加到我的应用程序委托 现在我有一个状态栏是白色的,但是文本是白色的,所以你看不

  • 状态栏文字颜色 sdk状态栏文字的颜色可以设置为白色或者黑色 , 设置方法如下: /** @param isDark true为黑字模式, false为白色模式 */ Ntalker.getInstance().statusBarDarkMode(boolean isDark);

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