我有一个从我的自定义调色板返回UIColor的类。我以编程方式调用此方法,但是当我在iOS 11上对其进行测试时,它始终会返回nil结果...我在多种设备和OS版本11.0、11.0.1、11.2上尝试了此操作,并且所有方法都返回nil。但是,只要我在> iOS 12上运行它们,它就会始终返回正确的颜色。
var color: UIColor? {
switch self {
case .darkIndigo: return UIColor(named: "darkIndigo")
case .lightNavy: return UIColor(named: "lightNavy")
case .cobalt: return UIColor(named: "cobalt")
}
}
Run Code Online (Sandbox Code Playgroud)
我最近更改了应用程序的包ID ...,这使我认为这与使用多个包时UIImage存在的类似问题有关。特别是当我收到错误消息时
警告:无法从以下任何捆绑包中解析名为“ darkIndigo”的颜色:
但是,应该如何解决呢?我是否应该手动删除整个资产目录并将其重新添加?
假设我的应用程式中有自订颜色:
extension UIColor {
static var myControlBackground: UIColor {
return UIColor(red: 0.3, green: 0.4, blue: 0.5, alpha: 1)
}
}
Run Code Online (Sandbox Code Playgroud)
我在自定义控件(和其他地方)中使用它作为控件的背景:
class MyControl: UIControl {
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
setup()
}
private func setup() {
backgroundColor = .myControlBackground
}
// Lots of code irrelevant to the question
}
Run Code Online (Sandbox Code Playgroud)
对于iOS 13,我希望我的自定义控件同时支持亮模式和暗模式。
一种解决方案是覆盖traitCollectionDidChange并查看颜色是否已更改,然后根据需要更新我的背景。我还需要提供浅色和深色。
因此,我更新了自定义颜色:
extension UIColor {
static var myControlBackgroundLight: UIColor {
return UIColor(red: 0.3, green: 0.4, blue: 0.5, alpha: …Run Code Online (Sandbox Code Playgroud) 我目前采用的是暗模式,我发现在iOS 12中运行该应用程序时,也可以在Interface Builder 中使用像systemBackground和这样的新系统颜色。 13光模式。因此很明显,运行时以某种方式将这些颜色转换为iOS 12。label
有谁知道引擎盖下会发生什么以及是否有方便的方法可以在代码中实现相同目的?