在 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")
系统会根据当前模式自动切换。
