SwiftUI动态颜色
SwiftUI动态颜色

SwiftUI动态颜色

在 SwiftUI 中,动态颜色指的是会根据系统环境自动变化的颜色,例如浅色模式 / 深色模式、对比度等。SwiftUI 的动态颜色主要有三种来源:系统语义颜色、桥接 UIKit/AppKit 颜色、以及自定义动态颜色。

系统语义颜色

第一类是 SwiftUI 自带的语义颜色。这些颜色会根据当前界面环境自动变化。

常见示例:

Color.primary
Color.secondary
Color.clear
Color.accentColor

Color.primary:主要文本颜色。浅色模式下通常接近黑色,深色模式下接近白色。

Color.secondary:次级文本颜色,比 primary 更浅,用于说明性内容。

Color.accentColor:应用的强调色(通常来自系统或 Asset Catalog)。

这些颜色不直接表示具体 RGB,而是“语义颜色”,系统会自动决定最终显示值。

桥接 UIKit/AppKit 颜色

第二类是桥接 UIKit 或 AppKit 的动态颜色。

UIColor 背景颜色:

Color(UIColor.systemBackground)
Color(UIColor.secondarySystemBackground)
Color(UIColor.tertiarySystemBackground)

Color(UIColor.systemGroupedBackground)
Color(UIColor. UIColor.tertiarySystemGroupedBackground)

UIColor 文本颜色:

Color(UIColor.label)
Color(UIColor.secondaryLabel)
Color(UIColor.tertiaryLabel)
Color(UIColor.quaternaryLabel)

UIColor 填充颜色:

Color(UIColor.systemFill)
Color(UIColor.secondarySystemFill)
Color(UIColor.tertiarySystemFill)
Color(UIColor.quaternarySystemFill)

UIKit 分隔线颜色:

Color(UIColor.separator)
Color(UIColor.opaqueSeparator)

UIKit 灰度系统颜色:

Color(UIColor.systemGray)
Color(UIColor.systemGray2)
Color(UIColor.systemGray3)
Color(UIColor.systemGray4)
Color(UIColor.systemGray5)
Color(UIColor.systemGray6)

UIKit 系统语义颜色(状态色):

Color(UIColor.systemRed)
Color(UIColor.systemBlue)
Color(UIColor.systemGreen)
Color(UIColor.systemOrange)
Color(UIColor.systemYellow)
Color(UIColor.systemPink)
Color(UIColor.systemPurple)
Color(UIColor.systemTeal)
Color(UIColor.systemIndigo)

macOS桥接颜色:

Color(NSColor.windowBackgroundColor)
Color(NSColor.controlBackgroundColor)
Color(NSColor.labelColor)
Color(NSColor.secondaryLabelColor)
Color(NSColor.separatorColor)

这些颜色来自 UIKit,本身就是动态颜色。SwiftUI 的 Color 只是包装它们。

例如:

systemBackground:系统页面背景。

secondarySystemBackground:卡片、列表、代码块等区域背景。

systemGray6:非常浅的灰色背景。

这种方式在 SwiftUI 项目中仍然非常常见,因为 UIKit 的语义颜色体系更完整。

自定义动态颜色

可以根据当前 ColorScheme 自己定义。

示例:

struct DynamicColorView: View {
    @Environment(\.colorScheme) var scheme

    var body: some View {
        Rectangle()
            .fill(scheme == .dark ? Color.black : Color.white)
    }
}

通过读取环境变量 colorScheme:.light 和 .dark 来决定使用什么颜色。

使用 Asset Catalog

在 Xcode 的 Assets.xcassets 中创建一个 Color Set,然后设置 Light Appearance 和 Dark Appearance。

例如,创建CodeBlockBackground。

在 SwiftUI 中使用:

Color("CodeBlockBackground")

系统会根据当前模式自动切换。

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注