swift - 在 SwiftUI 中设置切换颜色

标签 swift toggle swiftui

在遵循 Apple 的 tutorial on user input 之后,我实现了一个切换.目前,它看起来像这样:

这是生成此 UI 的代码:

NavigationView {
    List {
        Toggle(isOn: $showFavoritesOnly) {
            Text("Show Favorites only")
        }
    }
}

现在,我希望 Toggleon 颜色为蓝色而不是绿色。
我试过:

Toggle(isOn: $showFavoritesOnly) {
    Text("Show Favorites only")
}
.accentColor(.blue)
.foregroundColor(.blue)
.background(Color.blue)

这些都不起作用,我也找不到任何其他修饰符,例如 tintColor

如何更改 Toggle 的颜色?

最佳答案

swift 用户界面 3.0

使用色调

引入了一个新的修改器,它也可以改变 Toggle 颜色:

Toggle(isOn: $isToggleOn) {
    Text("Red")
    Image(systemName: "paintpalette")
}
.tint(.red)

Toggle(isOn: $isToggleOn) {
    Text("Orange")
    Image(systemName: "paintpalette")
}
.tint(.orange)

Toggle Tint Color

swift 用户界面 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))

Toggle Tint Color

swift 用户界面 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

关于swift - 在 SwiftUI 中设置切换颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56479674/

相关文章:

json - 快速获取 Json 5

javascript - 如何仅使用 javascript 切换/切换 div onclick 的类

SwiftUI 导航链接或演示链接不起作用

swiftui - 如何检查 SwiftUI 版本

ios - Swiftui - 如何使用环境对象作为参数初始化observedObject?

ios - 从 Swift 中的 Eureka Forms 获取值

ios - 在 web 服务代码中解包 Optional 值时意外发现 nil

iOS MKMapView 过滤所有博物馆

iphone - 按同一个按钮可以打开/关闭 MapKit 叠加吗?

javascript - 如何正确调用嵌套的 JavaScript 函数