首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >iOS:在使用UINavigationBarAppearance时指定状态栏文本颜色,忽略bar样式

iOS:在使用UINavigationBarAppearance时指定状态栏文本颜色,忽略bar样式
EN

Stack Overflow用户
提问于 2021-10-01 11:02:12
回答 2查看 1.8K关注 0票数 11

问题

我有一个应用程序,有不同的颜色导航条,为不同的流量。一些导航条有一个明亮的背景,需要黑色状态栏文本。另一些则有一个较暗的导航栏,需要白色状态栏文本。

作为迁移到iOS15的一部分,我更新了我正在开发的一个应用程序,使用UINavigationBarAppearance方法进行导航栏的样式设计。除了状态栏的颜色之外,我还能像以前一样把所有的东西都样式化。

以前,我一直在使用导航栏上的barStyle属性来设置状态栏文本颜色。

代码语言:javascript
运行
复制
navigationBar.barStyle = .black

在使用UINavigationBarAppearance时,这似乎不起作用。

样本代码

旧造型方法

代码语言:javascript
运行
复制
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let navigationBar = navigationController?.navigationBar
        
        // Style using old approach
        navigationBar?.barTintColor = UIColor.purple
        navigationBar?.titleTextAttributes = [.foregroundColor: UIColor.white]
        
        // Use barStyle to set status bar text color to white
        // This only work when using the old styling approach
        navigationBar?.barStyle = .black
    }

新造型方法

代码语言:javascript
运行
复制
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let navigationBar = navigationController?.navigationBar
        
        // Style nav bar using new Appearance API
        let navBarAppearance = UINavigationBarAppearance()
        navBarAppearance.backgroundColor = UIColor.purple
        navBarAppearance.titleTextAttributes = [.foregroundColor: UIColor.white]

        navigationBar?.standardAppearance = navBarAppearance
        navigationBar?.scrollEdgeAppearance = navBarAppearance
        
        // Use barStyle to set status bar text color to white
        // This only work when using the old styling approach
        navigationBar?.barStyle = .black
    }

备选方案

在导航栏上强制暗/光模式

可以使用属性overrideUserInterfaceStyle使状态栏文本变为白色。若要使状态栏文本变为白色,请设置

代码语言:javascript
运行
复制
navigationBar.overrideUserInterfaceStyle = dark

然而,这导致菜单从按钮在导航栏在黑暗模式下,这不是我想要的。

子类UINavigationController

我想我也可以子类UINavigationController,并显式地重写preferredStatusBarStyle以强制使用黑白文本。

必须在任何地方使用子类,我们就可以制作新的导航控制器来指定状态栏文本颜色,这似乎有点极端。

还有别的吗?

我不确定是否有更好的方法?

EN

回答 2

Stack Overflow用户

发布于 2021-12-17 04:17:34

我能够使用以下方法将状态栏文本设置为白色:

代码语言:javascript
运行
复制
navController.navigationBar.overrideUserInterfaceStyle = .dark

请注意,bencallis,这个问题的创建者,警告说,这个解决方案“导致菜单从按钮在导航栏在黑暗模式,这不是我想要的”。我不使用这样的菜单,所以这对我来说不是问题。也许这也不适合你。

票数 3
EN

Stack Overflow用户

发布于 2021-11-17 04:48:24

我在barStyle和overrideUserInterfaceStyle中同时使用UINavigationBarAppearance

代码语言:javascript
运行
复制
// statusBarStyle is .black or .default
if case .black = statusBarStyle {
     navigationController?.navigationBar.overrideUserInterfaceStyle = .dark
} else {
    navigationController?.navigationBar.overrideUserInterfaceStyle = .light
}
navigationController?.navigationBar.barStyle = statusBarStyle

看看它是如何工作的:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69404806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档