首页 > 解决方案 > 在 WatchKit 中访问系统颜色

问题描述

我正在尝试为我的 Apple Watch 界面使用 UIKit 颜色。你可以在 iOS 中使用UIColor类属性.systemBackground和其他属性来实现。例如:

let myColor = UIColor.systemBlue

编译 watchOS 扩展目标时给我错误:

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

我想知道是否有其他方法可以获取此系统颜色,如果没有,我需要获取一些 UI 元素的颜色,例如 SwiftUI 表格视图行背景,它看起来非常类似于UIColor.systemGray5.

@State private var isActive = false

var body: some View {
  List {
    Section() {
      ForEach(self.dataSource) { item in
        CustomCell()
        .listRowPlatterColor(self.isActive ? Color(UIColor.systemGray5) : Color(.orange))
      }
    }
  }
}

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

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

标签: uikitswiftuiwatchkit

解决方案


查看文档,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)
    }
}

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

  ForEach(self.dataSource) { item in
    CustomCell()
    .listRowPlatterColor(self.isActive ? Color(UIColor.mySystemGray5) : Color(.orange))
  }

推荐阅读