导航栏外观()(色调颜色..)

Posted

技术标签:

【中文标题】导航栏外观()(色调颜色..)【英文标题】:NavigationBar appearance() (tint color ..) 【发布时间】:2016-07-07 15:59:08 【问题描述】:

如何为特定的导航控制器设置色调?

因为使用:

UINavigationBar.appearance().barTintColor = UIColor(red: 0.1, green: 0.22, blue: 0.212, alpha: 1)

颜色将设置为所有导航控制器,不是吗?

我已经尝试过这段代码,但它不起作用!为什么?

let nav = UINavigationController(rootViewController: feedvc)
nav.navigationBar.appearance().barTintColor = UIColor(red: 0.1, green: 0.22, blue: 0.212, alpha: 1)

【问题讨论】:

您是否尝试过在视图控制器出现时更改颜色并在视图控制器消失时将其移除? 你的意思是从 viewcontroller 类访问它吗?因为我正试图从 appdelegate 中做到这一点 请检查 DMan 回答 它对我有用,但我现在想知道为什么它 nav.navigationBar 不能访问 appearance() 而 UINavigationBar 可以?他们不是同一类型吗? @WilliamKinaan 导航控制器与导航栏不同。导航栏是顶部的栏,而导航控制器是……嗯……一种特定类型的视图控制器 【参考方案1】:

您可以通过直接访问barTintColor 来设置特定控制器的色调:

nav.navigationBar.barTintColor = UIColor(red: 0.1, green: 0.22, blue: 0.212, alpha: 1)

【讨论】:

它对我有用,但我现在想知道为什么它 nav.navigationBar 无法访问 appearance() 而 UINavigationBar 可以?他们不是同一类型吗? 我不确定这是否足以作为“为什么”,但appearance() 是 Swift 中的静态方法,因此您不能在类的实例上调用它。 哦,是的@DMan!你说的对 !所以现在的问题是如何更改特定实例的外观()而不是应用程序中的所有 UINavigationBar 外观? 我不确定您的确切意思 - 上面的代码还不够吗?通过访问您要直接更改的属性来更改特定实例的外观 - 另一方面,UINavigationBar.appearance() 返回一个外观代理,该代理在设置其属性后会更改 所有 个实例。 【参考方案2】:

appearance() 用于在全局范围内更改事物,它对创建的事物的 next 实例生效。

因此,例如,如果您将其设置在与您正在应用外观() 类型相同的对象的 viewDidLoad 中,则为时已晚,因为该对象已经创建。但是,在您的情况下,您是在实例而不是类上调用它,因此无论如何它都不起作用,因为它是类方法而不是对象方法。

这就是为什么它不能在你的代码中工作,改变颜色刚刚设置nav.navigationBar.barTintColor

【讨论】:

tintColor 只是我想改变外观的一个例子!我没有在 ViewDidLoad 中使用它,而是在应用程序委托中使用它,那么问题是什么?以及如何更改导航栏唯一实例的外观? 您可以在 viewDidLoad 中更改单个实例,方法是直接在我的回答中设置其值,或者查看有关外观时包含的 InInstancesOfClasses 的文档和教程

以上是关于导航栏外观()(色调颜色..)的主要内容,如果未能解决你的问题,请参考以下文章

iOS13导航栏后退栏按钮项目色调颜色

导航栏隐藏XCode时状态栏更改色调颜色

色调颜色正在改变导航栏中图像的颜色 swift 3

UIAlertView 自动关闭后导航栏色调颜色发生变化

在自定义导航栏中设置条形按钮项目颜色

如何在导航栏中设置后退按钮的色调颜色[重复]