将 SwiftUI ColorPicker 限制为仅适用于 light/dark 模式的颜色
Restrict SwiftUI ColorPicker to only colors that work in light/dark mode
有没有办法将 ColorPicker
限制为 仅 显示在 light/dark 模式下有效的颜色?
现在我只知道允许用户选择任何颜色的默认 ColorPicker
配置:
不幸的是,ColorPicker 还不能定制到那个程度。作为解决方法,这里有一个简单的颜色选择器,您可以通过在 colors
数组中定义所有需要的颜色来轻松自定义它。
import SwiftUI
struct ContentView: View {
var colors: [[UIColor]] = [
[.red, .green, .blue],
[.purple, .systemPink, .systemTeal],
[.darkGray, .orange, .yellow]
]
@State var selectedColor = UIColor.red
var body: some View {
VStack {
colorPalette
HStack(alignment: .center) {
Text("Selected color:")
Color(selectedColor)
.frame(width: 60, height: 60)
}
}
}
var colorPalette: some View {
VStack(spacing: 0) {
ForEach(colors, id: \.self) { colorRowColors in
getColorRow(colors: colorRowColors)
}
}
}
func getColorRow(colors: [UIColor]) -> some View {
HStack(spacing: 0) {
ForEach(colors, id: \.self) { color in
Button {
selectedColor = color
} label: {
Color(color)
.border(Color.gray, width: color == selectedColor ? 2 : 0)
}
}
}
}
}
有没有办法将 ColorPicker
限制为 仅 显示在 light/dark 模式下有效的颜色?
现在我只知道允许用户选择任何颜色的默认 ColorPicker
配置:
不幸的是,ColorPicker 还不能定制到那个程度。作为解决方法,这里有一个简单的颜色选择器,您可以通过在 colors
数组中定义所有需要的颜色来轻松自定义它。
import SwiftUI
struct ContentView: View {
var colors: [[UIColor]] = [
[.red, .green, .blue],
[.purple, .systemPink, .systemTeal],
[.darkGray, .orange, .yellow]
]
@State var selectedColor = UIColor.red
var body: some View {
VStack {
colorPalette
HStack(alignment: .center) {
Text("Selected color:")
Color(selectedColor)
.frame(width: 60, height: 60)
}
}
}
var colorPalette: some View {
VStack(spacing: 0) {
ForEach(colors, id: \.self) { colorRowColors in
getColorRow(colors: colorRowColors)
}
}
}
func getColorRow(colors: [UIColor]) -> some View {
HStack(spacing: 0) {
ForEach(colors, id: \.self) { color in
Button {
selectedColor = color
} label: {
Color(color)
.border(Color.gray, width: color == selectedColor ? 2 : 0)
}
}
}
}
}