如何使用 swiftui link 两个最小最大滑块 iOS15

How to link two min max sliders with swiftui iOS15

Image: Sliders

我有两个滑块来过滤结果。其中一个滑块设置最小值,另一个设置最大值。过滤器工作正常,除了最小值可以增加到大于最大值的值,最大值可以降低到最小值以下。

我怎样才能 link 这些滑块使最小值不超过最大值并且最大值不低于最小值?

代码如下:

@State private var minimum: Double = 98.0
@State private var maximum: Double = 1000000.0

var filteredProducts: [Product]

var body: some View {
    List {
        Section(header: Text("Filters")){
            DisclosureGroup("Price range") {
                Slider(value: $minimum, in: 98...1000000) {
                    Text("\(minimum)")
                } minimumValueLabel: {
                    Text("min")
                } maximumValueLabel: {
                    Text("\(minimum, specifier: "%.0f")")
                }
                
                Slider(value: $maximum, in: 98...1000000) {
                    Text("\(maximum)")
                } minimumValueLabel: {
                    Text("max")
                } maximumValueLabel: {
                    Text("\(maximum, specifier: "%.0f")")
                }
            }
        }
    }
}

var slideresults: [Product] {
    if minimum == 0 && maximum == 1000000000.0 {
        return filteredProducts
    } else {
        return filteredProducts.filter {
            [=12=].price > minimum &&
            [=12=].price < maximum
        }
    }
}

我看你很久以前就问过了,希望还是能帮到你。

我遇到了同样的问题,我就是这样解决的。 (显示在您的代码上)

@State private var minimum: Double = 98.0
@State private var maximum: Double = 1000000.0

var filteredProducts: [Product]

var body: some View {
    List {
        Section(header: Text("Filters")){
            DisclosureGroup("Price range") {
                Slider(value: $minimum, in: 98...maximum) {
                    Text("\(minimum)")
                } minimumValueLabel: {
                    Text("min")
                } maximumValueLabel: {
                    Text("\(maximum, specifier: "%.0f")")
                }
                
                Slider(value: $maximum, in: minimum...1000000) {
                    Text("\(maximum)")
                } minimumValueLabel: {
                    Text("\(minimum, specifier: "%.0f")
                } maximumValueLabel: {
                    Text("\(maximum, specifier: "%.0f")")
                }
            }
        }
    }
}

基本上,为您的最小值滑块提供您的@state 最大值,反之亦然为最大值滑块。并放置相应的标签:最大值标签到最小值滑块,反之亦然。