SwiftUI:使用资产目录中的颜色集

时间:2019-06-30 10:22:21

标签: colors uicolor swiftui asset-catalog

在SwiftUI中,我们可以使用以下方法从资产目录中的颜色集中获取颜色:

extension Color {
  static let coral = Color("coral")
}

这需要字符串类型的名称,并且使用许多颜色集会变得非常乏味。还有另一种获取颜色集的方法,类似于使用图像文字从资产目录中获取图像的方法吗?或者,只是减少冗余。

如果没有,如何在SwiftUI中以编程方式创建动态颜色?例如,这就是在UIKit中完成的方式:

extension UIColor {
    static let dynamicColor = UIColor { traitCollection in
        return traitCollection.userInterfaceStyle == .dark ? .black : .white
    }
}

3 个答案:

答案 0 :(得分:1)

如果没有,如何在SwiftUI中以编程方式创建动态颜色?例如,这就是在UIKit中完成的方式:

这几乎是相同的:

try/catch

答案 1 :(得分:0)

我很确定Apple会将其留给开发人员。例如,您可以为SwiftUI颜色编写自定义SwiftGen(或稍等片刻)模板。 https://github.com/SwiftGen/SwiftGen#colors

答案 2 :(得分:0)

我想分享一种在资源目录中定义动态颜色的替代方法, 但无需编写繁琐的代码,例如

Color("yellow")

1。像往常一样在资产目录中定义颜色

enter image description here

2。在您的代码中,找到一个将颜色定义为变量的位置,在我的情况下,它将是这样的:

/// ColorExtension.swift 

static let ui = Color.UI()

struct UI {
     let yellow = Color("yellow")
}

3。完成

像这样使用您的颜色:

Text("Hello").background(Color.ui.yellow)

这仅需要在代码中写入硬编码颜色1次。