如何在UIColor中使用Colors.xcassets中的命名颜色类型?
问题:Colors.xcassets定义的颜色无法用UIColor初始化,但SwiftUI的Color可正常调用
我在Colors.xcassets中定义了多组颜色集,这些颜色以JSON格式定义,例如Gray50颜色的JSON定义如下:
{ "colors" : [ { "color" : { "color-space" : "srgb", "components" : { "alpha" : "1.000", "blue" : "0.616", "green" : "0.600", "red" : "0.584" } }, "idiom" : "universal" } ], "info" : { "author" : "xcode", "version" : 1 } }
在SwiftUI中可正常用Color("Gray50")调用这些颜色,但无法通过UIColor(named: "Gray50")初始化,而我的开发场景需要使用UIColor。请问该JSON格式颜色是否不被UIColor支持,还是我遗漏了相关配置?
解决方案
这种JSON格式的颜色完全被UIColor支持,你遇到的问题大概率是以下几种情况导致:
- Bundle参数缺失或错误:如果颜色资源不在主Bundle中,初始化UIColor时需要显式传入对应Bundle,比如
UIColor(named: "Gray50", in: .main, compatibleWith: nil);即使是主Bundle,显式传参也能解决部分Xcode缓存导致的识别问题。 - Xcode缓存干扰:执行Clean操作(
Command+Shift+K),删除Derived Data目录后重新Build项目,能解决多数资源识别异常的问题。 - 名称拼写不匹配:确认调用时的颜色名称和Colors.xcassets中的颜色集名称完全一致,注意iOS对资源名称是大小写敏感的。
- 颜色集配置异常:检查颜色集的
idiom配置,你当前使用的universal是通用配置没问题,但如果存在设备特定的颜色定义,要确保当前运行设备有对应的配置项。
如果暂时无法排查出根本原因,也可以通过SwiftUI Color转UIColor的方式临时适配:UIColor(Color("Gray50")),但建议优先排查上述问题解决根本矛盾。
内容的提问来源于stack exchange,提问作者Zhou Haibo
相关产品推荐
相关产品推荐

