访问 WatchKit 中的系统颜色

Bor*_* Y. 5 uikit watchkit swiftui

我正在尝试为我的 Apple Watch 界面使用 UIKit 颜色。您可以在 iOS 中使用UIColor诸如此类的类属性来完成此操作.systemBackground。例如:

\n\n
let myColor = UIColor.systemBlue\n
Run Code Online (Sandbox Code Playgroud)\n\n

编译 watchOS 扩展目标时出现错误:

\n\n
\n

类型“UIColor”没有成员“UIColor.systemBlue”。

\n
\n\n

我想知道是否有替代方法来获取此系统颜色,如果不是 \xe2\x80\x94 我需要的是获取某些 UI 元素的颜色,例如 SwiftUI 表视图行背景,它看起来与UIColor.systemGray5.

\n\n
@State private var isActive = false\n\nvar body: some View {\n  List {\n    Section() {\n      ForEach(self.dataSource) { item in\n        CustomCell()\n        .listRowPlatterColor(self.isActive ? Color(UIColor.systemGray5) : Color(.orange))\n      }\n    }\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

上面的代码无法编译,因为UIColor.systemGray5在 WatchKit 中找不到。我尝试创建一个在 iPhone 和 Watch 目标中都被起诉的类,它修复了 Xcode 自动完成功能。但当尝试将其用于 Apple Watch 目标时,该应用程序崩溃了。

\n\n

我希望有一种方法,而不是找到正确的颜色并对其进行硬编码。

\n

小智 1

查看文档,UIColor.system-ish 仅适用于 iOS、Catalyst 和一些 tvOS。你可以做的是扩展 UIColor 并创建 systemGray5:

extension UIColor {
    static var mySystemGray5: UIColor {
        return .init(red: 229/255, green: 229/255, blue: 234/255, alpha: 1)
    }
}
Run Code Online (Sandbox Code Playgroud)

并在您的代码上使用,例如:

  ForEach(self.dataSource) { item in
    CustomCell()
    .listRowPlatterColor(self.isActive ? Color(UIColor.mySystemGray5) : Color(.orange))
  }
Run Code Online (Sandbox Code Playgroud)