SwiftUI 系统颜色表查询

在使用 SwiftUI 开发时,使用系统预置的颜色无论是在 UI 效果还是在可维护性上都是比较推荐的。这里原文转载一篇日语文章,展示了系统颜色值的一览表方便设计开发时查询取用。文章最后还提供了一个 Demo App 可用使用。

原文链接:[SwiftUI]Color, UIColor, Materialの一覧

SwiftUIで使用できる色

SwiftUIでは、
SwiftUIのColor

UIKitでのUIColor

Color(UIColor.systemOrange)

などを使って色を指定できます。

各値の数値を指定して、好きな色を作ることもできます。

//RGBと不透明度を指定
Color(red: 1.0, green: 0.58, blue: 0.0, opacity: 1.0)

//グレースケールと不透明度を指定
Color(white: 0.5, opacity: 1.0)

定義されている色を使用するメリット

先述したように色を自分で作ることもできますが、

などのように、基本的な色は定義されています。
定義されている色を使用することでライトモード、ダークモード、アクセシビリティの状態に応じて、自動的に最適な色に変化させることができます。

NameDefaultAccessible
.orangered: 1.0, green: 0.58, blue: 0.0, opacity: 1.0red: 0.79, green: 0.2, blue: 0.0, opacity: 1.0

またUIColorはApple純正のコンポーネントに使われている色を指定することができ、
SwiftUIにはない SearchBarなどを自作したい場合などに、純正とまったく同じ色に指定できます。

: Color

Standard colors

NameLightDark
.blackred: 0.0, green: 0.0, blue: 0.0, opacity: 1.0red: 0.0, green: 0.0, blue: 0.0, opacity: 1.0
.bluered: 0.0, green: 0.48, blue: 1.0, opacity: 1.0red: 0.04, green: 0.52, blue: 1.0, opacity: 1.0
.brownred: 0.64, green: 0.52, blue: 0.37, opacity: 1.0red: 0.67, green: 0.56, blue: 0.41, opacity: 1.0
.clearred: 0.0, green: 0.0, blue: 0.0, opacity: 0.0red: 0.0, green: 0.0, blue: 0.0, opacity: 0.0
.cyanred: 0.2, green: 0.68, blue: 0.9, opacity: 1.0red: 0.39, green: 0.82, blue: 1.0, opacity: 1.0
.grayred: 0.56, green: 0.56, blue: 0.58, opacity: 1.0red: 0.56, green: 0.56, blue: 0.58, opacity: 1.0
.greenred: 0.2, green: 0.78, blue: 0.35, opacity: 1.0red: 0.19, green: 0.82, blue: 0.35, opacity: 1.0
.indigored: 0.35, green: 0.34, blue: 0.84, opacity: 1.0red: 0.37, green: 0.36, blue: 0.9, opacity: 1.0
.mintred: 0.0, green: 0.78, blue: 0.75, opacity: 1.0red: 0.39, green: 0.9, blue: 0.89, opacity: 1.0
.orangered: 1.0, green: 0.58, blue: 0.0, opacity: 1.0red: 1.0, green: 0.62, blue: 0.04, opacity: 1.0
.pinkred: 1.0, green: 0.18, blue: 0.33, opacity: 1.0red: 1.0, green: 0.22, blue: 0.37, opacity: 1.0
.purplered: 0.69, green: 0.32, blue: 0.87, opacity: 1.0red: 0.75, green: 0.35, blue: 0.95, opacity: 1.0
.redred: 1.0, green: 0.23, blue: 0.19, opacity: 1.0red: 1.0, green: 0.27, blue: 0.23, opacity: 1.0
.tealred: 0.19, green: 0.69, blue: 0.78, opacity: 1.0red: 0.25, green: 0.78, blue: 0.88, opacity: 1.0
.whitered: 1.0, green: 1.0, blue: 1.0, opacity: 1.0red: 1.0, green: 1.0, blue: 1.0, opacity: 1.0
.yellowred: 1.0, green: 0.8, blue: 0.0, opacity: 1.0red: 1.0, green: 0.84, blue: 0.04, opacity: 1.0

Semantic colors

NameLightDark
.accentColorred: 0.0, green: 0.48, blue: 1.0, opacity: 1.0red: 0.04, green: 0.52, blue: 1.0, opacity: 1.0
.primaryred: 0.0, green: 0.0, blue: 0.0, opacity: 1.0red: 1.0, green: 1.0, blue: 1.0, opacity: 1.0
.secondaryred: 0.24, green: 0.24, blue: 0.26, opacity: 0.6red: 0.92, green: 0.92, blue: 0.96, opacity: 0.6

: UIColor

UI element colors

Label colors

NameLightDark
.labelred: 0.0, green: 0.0, blue: 0.0, opacity: 1.0red: 1.0, green: 1.0, blue: 1.0, opacity: 1.0
.secondaryLabelred: 0.24, green: 0.24, blue: 0.26, opacity: 0.6red: 0.92, green: 0.92, blue: 0.96, opacity: 0.6
.tertiaryLabelred: 0.24, green: 0.24, blue: 0.26, opacity: 0.3red: 0.92, green: 0.92, blue: 0.96, opacity: 0.3
.quaternaryLabelred: 0.24, green: 0.24, blue: 0.26, opacity: 0.18red: 0.46, green: 0.46, blue: 0.5, opacity: 0.18

Fill colors

NameLightDark
.systemFillred: 0.47, green: 0.47, blue: 0.5, opacity: 0.2red: 0.47, green: 0.47, blue: 0.5, opacity: 0.36
.secondarySystemFillred: 0.47, green: 0.47, blue: 0.5, opacity: 0.16red: 0.47, green: 0.47, blue: 0.5, opacity: 0.32
.tertiarySystemFillred: 0.46, green: 0.46, blue: 0.5, opacity: 0.12red: 0.46, green: 0.46, blue: 0.5, opacity: 0.24
.quaternarySystemFillred: 0.45, green: 0.45, blue: 0.5, opacity: 0.08red: 0.46, green: 0.46, blue: 0.5, opacity: 0.18

Text colors

NameLightDark
.placeholderTextred: 0.24, green: 0.24, blue: 0.26, opacity: 0.3red: 0.92, green: 0.92, blue: 0.96, opacity: 0.3

Tint color

NameLightDark
.tintColorred: 0.0, green: 0.48, blue: 1.0, opacity: 1.0red: 0.04, green: 0.52, blue: 1.0, opacity: 1.0

Standard content background colors

NameLightDark
.systemBackgroundred: 1.0, green: 1.0, blue: 1.0, opacity: 1.0red: 0.0, green: 0.0, blue: 0.0, opacity: 1.0
.secondarySystemBackgroundred: 0.95, green: 0.95, blue: 0.97, opacity: 1.0red: 0.11, green: 0.11, blue: 0.12, opacity: 1.0
.tertiarySystemBackgroundred: 1.0, green: 1.0, blue: 1.0, opacity: 1.0red: 0.17, green: 0.17, blue: 0.18, opacity: 1.0

Grouped content background colors

NameLightDark
.systemGroupedBackgroundred: 0.95, green: 0.95, blue: 0.97, opacity: 1.0red: 0.0, green: 0.0, blue: 0.0, opacity: 1.0
.secondarySystemGroupedBackgroundred: 1.0, green: 1.0, blue: 1.0, opacity: 1.0red: 0.11, green: 0.11, blue: 0.12, opacity: 1.0
.tertiarySystemGroupedBackgroundred: 0.95, green: 0.95, blue: 0.97, opacity: 1.0red: 0.17, green: 0.17, blue: 0.18, opacity: 1.0

Separator colors

NameLightDark
.separatorred: 0.24, green: 0.24, blue: 0.26, opacity: 0.29red: 0.33, green: 0.33, blue: 0.35, opacity: 0.6
.opaqueSeparatorred: 0.78, green: 0.78, blue: 0.78, opacity: 1.0red: 0.22, green: 0.22, blue: 0.23, opacity: 1.0

Link color

NameLightDark
.linkred: 0.0, green: 0.48, blue: 1.0, opacity: 1.0red: 0.04, green: 0.52, blue: 1.0, opacity: 1.0

Nonadaptable colors

NameLightDark
.darkTextwhite: 0.0, opacity: 1.0white: 0.0, opacity: 1.0
.lightTextwhite: 1.0, opacity: 0.6white: 1.0, opacity: 0.6

Standard colors

Adaptable colors

NameLightDark
.systemBluered: 0.0, green: 0.48, blue: 1.0, opacity: 1.0red: 0.04, green: 0.52, blue: 1.0, opacity: 1.0
.systemBrownred: 0.64, green: 0.52, blue: 0.37, opacity: 1.0red: 0.67, green: 0.56, blue: 0.41, opacity: 1.0
.systemCyanred: 0.2, green: 0.68, blue: 0.9, opacity: 1.0red: 0.39, green: 0.82, blue: 1.0, opacity: 1.0
.systemGreenred: 0.2, green: 0.78, blue: 0.35, opacity: 1.0red: 0.19, green: 0.82, blue: 0.35, opacity: 1.0
.systemIndigored: 0.35, green: 0.34, blue: 0.84, opacity: 1.0red: 0.37, green: 0.36, blue: 0.9, opacity: 1.0
.systemMintred: 0.0, green: 0.78, blue: 0.75, opacity: 1.0red: 0.39, green: 0.9, blue: 0.89, opacity: 1.0
.systemOrangered: 1.0, green: 0.58, blue: 0.0, opacity: 1.0red: 1.0, green: 0.62, blue: 0.04, opacity: 1.0
.systemPinkred: 1.0, green: 0.18, blue: 0.33, opacity: 1.0red: 1.0, green: 0.22, blue: 0.37, opacity: 1.0
.systemPurplered: 0.69, green: 0.32, blue: 0.87, opacity: 1.0red: 0.75, green: 0.35, blue: 0.95, opacity: 1.0
.systemRedred: 1.0, green: 0.23, blue: 0.19, opacity: 1.0red: 1.0, green: 0.27, blue: 0.23, opacity: 1.0
.systemTealred: 0.19, green: 0.69, blue: 0.78, opacity: 1.0red: 0.25, green: 0.78, blue: 0.88, opacity: 1.0
.systemYellowred: 1.0, green: 0.8, blue: 0.0, opacity: 1.0red: 1.0, green: 0.84, blue: 0.04, opacity: 1.0

Adaptable gray colors

NameLightDark
.systemGrayred: 0.56, green: 0.56, blue: 0.58, opacity: 1.0red: 0.95, green: 0.95, blue: 0.97, opacity: 1.0
.systemGray2red: 0.68, green: 0.68, blue: 0.7, opacity: 1.0red: 0.39, green: 0.39, blue: 0.4, opacity: 1.0
.systemGray3red: 0.78, green: 0.78, blue: 0.8, opacity: 1.0red: 0.28, green: 0.28, blue: 0.29, opacity: 1.0
.systemGray4red: 0.82, green: 0.82, blue: 0.84, opacity: 1.0red: 0.23, green: 0.23, blue: 0.24, opacity: 1.0
.systemGray5red: 0.9, green: 0.9, blue: 0.92, opacity: 1.0red: 0.17, green: 0.17, blue: 0.18, opacity: 1.0
.systemGray6red: 0.95, green: 0.95, blue: 0.97, opacity: 1.0red: 0.11, green: 0.11, blue: 0.12, opacity: 1.0

Transparent color

NameLightDark
.clearwhite: 0.0, opacity: 0.0white: 0.0, opacity: 0.0

Fixed colors

NameLightDark
.blackwhite: 0.0, opacity: 1.0white: 0.0, opacity: 1.0
.bluered: 0.0, green: 0.0, blue: 1.0, opacity: 1.0red: 0.0, green: 0.0, blue: 1.0, opacity: 1.0
.brownred: 0.6, green: 0.4, blue: 0.2, opacity: 1.0red: 0.6, green: 0.4, blue: 0.2, opacity: 1.0
.cyanred: 0.0, green: 1.0, blue: 1.0, opacity: 1.0red: 0.0, green: 1.0, blue: 1.0, opacity: 1.0
.darkGraywhite: 0.33, opacity: 1.0white: 0.33, opacity: 1.0
.graywhite: 0.5, opacity: 1.0white: 0.5, opacity: 1.0
.greenred: 0.0, green: 1.0, blue: 0.0, opacity: 1.0red: 0.0, green: 1.0, blue: 0.0, opacity: 1.0
.lightGraywhite: 0.67, opacity: 1.0white: 0.67, opacity: 1.0
.magentared: 1.0, green: 0.0, blue: 1.0, opacity: 1.0red: 1.0, green: 0.0, blue: 1.0, opacity: 1.0
.orangered: 1.0, green: 0.5, blue: 0.0, opacity: 1.0red: 1.0, green: 0.5, blue: 0.0, opacity: 1.0
.purplered: 0.5, green: 0.0, blue: 0.5, opacity: 1.0red: 0.5, green: 0.0, blue: 0.5, opacity: 1.0
.redred: 1.0, green: 0.0, blue: 0.0, opacity: 1.0red: 1.0, green: 0.0, blue: 0.0, opacity: 1.0
.whitewhite: 1.0, opacity: 1.0white: 1.0, opacity: 1.0
.yellowred: 1.0, green: 1.0, blue: 0.0, opacity: 1.0red: 1.0, green: 1.0, blue: 0.0, opacity: 1.0

: Material

Viewのbackgroundなどを、すりガラス風の見た目にできます。

NameLightDark
.ultraThinMaterial
.thinMaterial
.regularMaterial
.thickMaterial
.ultraThickMaterial
.bar

色関連の便利そうなモノ

文字色をライトモードとダークモードで別の色を指定する方法

文字色をライトモードの時は赤色にダークモードの時は黄色にしています。

@Environment(\.colorScheme) private var colorScheme

var body: some View {
    VStack {
        Text("Hello, world!")
            .foregroundStyle(colorScheme == .dark ? Color.yellow: Color.red)
    }
}

↓colorschemeについての説明


Color, UIColorから色の要素を求める関数

func getColorElements(_ color: UIColor) -> (red: CGFloat?, green: CGFloat?, blue: CGFloat?, white: CGFloat?, opacity: CGFloat) {
    let components = color.cgColor.components!

    if components.count == 4 {
        return (red: components[0], green: components[1], blue: components[2], white: nil, opacity: components[3])
    } else {
        return (red: nil, green: nil, blue: nil, white: components[0], opacity: components[1])
    }
}

RGB値の色の場合

print(getColorElements(.orange))
// ↓戻り値
// (red: Optional(1.0), green: Optional(0.5), blue: Optional(0.0), white: nil, opacity: 1.0)

グレースケール値の色の場合

print(getColorElements(.gray))
// ↓戻り値
// (red: nil, green: nil, blue: nil, white: Optional(0.5), opacity: 1.0)

"SwiftUIで使用できる色"を確認できるアプリ

この記事で紹介したすべてのColor, Materialを実機で確認できるアプリをGitHubに公開しました。
ライトモード、ダークモード時のより詳しいRGB値や、アクセシビリティモード時のRGB値も確認できます。

github ColorChart

版权信息:本文为转载内容。

相关文章:

拥抱 Swift 和 SwiftUI
SwiftUI Menu checkmark 文本对齐
SwiftUI List selection 的使用提示
Swift 从 ObservableObject 迁移到 @Observable 的再讨论
Swift并发编程 - 理解 async 和 await

发表留言

您的电子邮箱地址不会被公开,必填项已用*标注。发布的留言可能不会立即公开展示,请耐心等待审核通过。