SwiftUI 3.0
使用tint
引入了一个新的修饰符,可以改变开关的颜色:
Toggle(isOn: $isToggleOn) {
Text("Red")
Image(systemName: "paintpalette")
}
.tint(.red)
Toggle(isOn: $isToggleOn) {
Text("Orange")
Image(systemName: "paintpalette")
}
.tint(.orange)
![开关按钮着色切换](https://istack.dev59.com/fSIDV.webp)
SwiftUI 2.0
使用 SwitchToggleStyle
在 SwiftUI 2.0 中,你现在可以为打开的状态设置一个着色,而不影响关闭的状态:
Toggle(isOn: $isToggleOn) {
Text("Red")
Image(systemName: "paintpalette")
}
.toggleStyle(SwitchToggleStyle(tint: Color.red))
Toggle(isOn: $isToggleOn) {
Text("Orange")
Image(systemName: "paintpalette")
}
.toggleStyle(SwitchToggleStyle(tint: Color.orange))
![切换色调颜色](https://istack.dev59.com/fSIDV.webp)
SwiftUI 1.0
使用ToggleStyle
我创建了一个新的ToggleStyle,来改变Toggle的三种颜色(开启状态的颜色,关闭状态的颜色和拇指的颜色)。
struct ColoredToggleStyle: ToggleStyle {
var label = ""
var onColor = Color(UIColor.green)
var offColor = Color(UIColor.systemGray5)
var thumbColor = Color.white
func makeBody(configuration: Self.Configuration) -> some View {
HStack {
Text(label)
Spacer()
Button(action: { configuration.isOn.toggle() } )
{
RoundedRectangle(cornerRadius: 16, style: .circular)
.fill(configuration.isOn ? onColor : offColor)
.frame(width: 50, height: 29)
.overlay(
Circle()
.fill(thumbColor)
.shadow(radius: 1, x: 0, y: 1)
.padding(1.5)
.offset(x: configuration.isOn ? 10 : -10))
.animation(Animation.easeInOut(duration: 0.1))
}
}
.font(.title)
.padding(.horizontal)
}
}
应用实例
Toggle("", isOn: $toggleState)
.toggleStyle(
ColoredToggleStyle(label: "My Colored Toggle",
onColor: .green,
offColor: .red,
thumbColor: Color(UIColor.systemTeal)))
Toggle("", isOn: $toggleState2)
.toggleStyle(
ColoredToggleStyle(label: "My Colored Toggle",
onColor: .purple))
来自 SwiftUI 书籍
![Toggle Example](https://istack.dev59.com/SxVfe.webp)
.accentColor
修改。我已经提交了 FB6158727,如果 Apple 有回应的话我会告诉你的。 :) - Clifton Labrum.accentColor
生效。 - Spencer Connaughton