【问题标题】:SwiftUI: Using Color Set from Asset CatalogSwiftUI:使用资产目录中的颜色集
【发布时间】:2019-11-11 10:12:55
【问题描述】:

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

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

这需要字符串类型的名称,并且对于许多颜色集变得相当乏味。是否有另一种获取颜色集的方法,类似于我们使用图像文字从资产目录中获取图像的方式?或者,只是一些不那么多余的东西。

如果不是,如何在 SwiftUI 中以编程方式创建动态颜色?例如,这就是它在 UIKit 中的实现方式:

extension UIColor {
    static let dynamicColor = UIColor { $0.userInterfaceStyle == .dark ? .black : .white }
}

【问题讨论】:

    标签: colors uicolor swiftui asset-catalog


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      如果不是,如何在 SwiftUI 中以编程方式创建动态颜色?例如,这就是它在 UIKit 中的实现方式:

      这几乎是一样的:

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

      【讨论】:

      • 这是一个不错的临时解决方案,值得点赞。如果我们将来不需要为此依赖 UIKit,那将是理想的选择。
      • @JWK,它是官方的公共 API,所以在它被弃用(并因此被一些新的取代)之前,它对所有场景都有效。
      • 当然,我不是故意的。
      • 意识到您确实回答了这个问题的第二部分,我会将其标记为已接受。它已经积了一段时间的灰尘,所以我很抱歉忽略了这一点。
      【解决方案3】:

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

      Color("yellow")
      

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

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

      extension Color {
          static let ui = Color.UI()
          
          struct UI {
               let yellow = Color("yellow")
          }
      }
      

      3。完成

      像这样使用你的颜色:

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

      这只需要在您的代码中编写硬编码颜色 1 次。

      【讨论】:

      猜你喜欢
      • 2017-11-07
      • 1970-01-01
      • 2017-05-30
      • 1970-01-01
      • 1970-01-01
      • 2022-10-23
      • 2020-12-11
      • 2018-04-16
      • 1970-01-01
      相关资源
      最近更新 更多