ios - 如何调试 navigationcontroller.tintColor 不变?
问题描述
出于某种原因,我无法弄清楚为什么我无法更改tintColor
我的应用程序中导航栏按钮的按钮,而且我不知道如何找出原因。你能推荐我如何调试这个问题吗?
我将此添加到我的视图控制器的 viewDidLoad 中:
UINavigationBar.appearance().tintColor = .green
但是,没有任何变化,后退按钮和 Aa bar 按钮保持默认的灰色。
导航+状态栏是半透明的,位于整个应用程序的背景颜色之上viewcontroller
。
我可以barbutton
在一个测试应用程序中将其更改为 .green (将其添加到 vc 的 ViewDidLoad 中,确保将 barbutton 图像资产设置为模板,以便它们采用我设置的颜色) . 但无论出于何种原因,同样的事情在我的应用原型中不会改变。
有什么我可能不知道的常见原因吗?
添加:栏按钮仅通过情节提要添加。
这是尝试通过 1 个视图控制器的 viewDidLoad 更改其颜色的代码:
Class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
UINavigationBar.appearance().tintColor = .green
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true
}
}
解决方案
如果你想使用全局appearance()
代理,那么你不能在你的视图控制器中这样做。
如果要更改视图控制器的tintColor
in viewDidLoad
,则必须navigationController
直接在控制器的实例上进行设置:
navigationController?.navigationBar.tintColor = .green
要使用appearance()
代理并tintColor
为导航栏设置全局,您必须在初始化导航控制器之前执行此操作。
例如,如果您在应用程序委托中执行此操作,它将起作用application(_:didFinishLaunchingWithOptions:)
:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
UINavigationBar.appearance().tintColor = .green
return true
}
有关原因的详细信息,请参阅UIAppearance
文档:
https://developer.apple.com/documentation/uikit/uiappearance
“iOS 在视图进入窗口时应用外观更改,它不会更改已经在窗口中的视图的外观。要更改当前在窗口中的视图的外观,请从视图层次结构中删除视图,然后放回去。”
推荐阅读
- c# - Regex.IsMatch 导致灾难性的回溯
- excel - 使用 VBA 创建的 Excel 复选框不成比例
- java - 屏幕更改时的Libgdx,套接字事件仍在前一个屏幕中运行
- java - maven-assembly-plugin 被忽略了吗?
- heroku - 有没有办法在 Heroku 上运行 ssh 命令?
- reactjs - 从 3.3.0 降级回 3.2.0 后的 Create-react-app linting 警告
- javascript - 过期后设置字段(MongoDB)
- python - raise ApiClientException(message) geolocation.exceptions.ApiClientException: 请求被拒绝
- sql - 从 Excel 97-2003 导入 SQL
- r - 如何缩写 RPART 中的字段数