在 SwiftUI 中使用 Toggle 禁用 Slider 会导致样式问题

Ian*_*Ian 4 swiftui

使用切换来禁用/启用滑块会导致样式反转,直到您与滑块交互为止。我显然以错误的方式处理这个问题!

struct ContentView: View {
@State var isActive = true
@State var value :Double = 2.0

var body: some View {
    VStack {
        Section(header:
            HStack {
                Toggle(isOn: $isActive)
                    {}.toggleStyle(SwitchToggleStyle(tint: .purple))
            }
        ) {
            HStack {
                Slider(value: $value, in: 0...4, step: 1)
                    .accentColor(isActive ? .purple : .secondary).disabled(!isActive)
                }.pickerStyle(SegmentedPickerStyle())
        }
    }
}
}
Run Code Online (Sandbox Code Playgroud)

初始状态

禁用切换 - 请注意滑块样式错误,但颜色正确

再次启用切换 - 请注意滑块样式现已禁用,并且颜色(正确的紫色)处于禁用样式

如果您与重新启用的滑块进行交互,样式会自行修复。

我希望我在这里做一些愚蠢的事情......

Asp*_*eri 10

添加.id到最后,如下图所示。这会重置滑块,它会根据需要看起来。使用 Xcode 12.1 / iOS 14.1 进行测试

Slider(value: $value, in: 0...4, step: 1)
    .accentColor(isActive ? .purple : .secondary)
    .disabled(!isActive)
    .id(isActive)           // << this !!
Run Code Online (Sandbox Code Playgroud)