ios 如何删除滑块SwiftUI中的步骤

00jrzges  于 2022-12-15  发布在  iOS
关注(0)|答案(2)|浏览(138)

我通过SwiftUI创建了一个UISlider,但是沿着轨道有太多的“台阶标记”,这没有我希望达到的“外观和感觉”。除了把浅色变成黑色之外,有人知道去除它们的技巧吗?
似乎只要我在UISlider初始化期间传递任何步骤值,步骤/刻度标记就一直存在。

struct setLoggingView: View {
    
    @State var restfullness: Int
    @State var elapsedRestTime: Double
    var totalRestTime: Double
    var stepValue: Int

    var body: some View {
        
        GeometryReader { geometry in
            
            ScrollView {
                
                VStack {
                    
                    Text("Rested  \(Int(elapsedRestTime)) seconds")
                    
                    Slider(value: $elapsedRestTime,
                           in: 0...totalRestTime,
                           step: Double.Stride(stepValue),
                           label: {
                        Text("Slider")
                    }, minimumValueLabel: {
                        Text("-\(stepValue)")
                    }, maximumValueLabel: {
                        Text("+\(stepValue)")
                    })
                        .tint(Color.white)
                        .padding(.bottom)

                    Divider()

                    Spacer()
                    
                    Text("Restfullness")
                        .frame(minWidth: 0, maxWidth: .infinity)
                    
                    restfullnessStepper(restfullnessIndex: restfullness)
                
                    Button(action: {
                        print("Update Button Pressed")
                    }) {
                        HStack {
                            Text("Update")
                                .fontWeight(.medium)
                        }
                    }
                    .cornerRadius(40)
                    
                }
                .border(Color.yellow)
            }
        }
    }
}
atmip9wb

atmip9wb1#

尝试研究并询问了一些导师,但如果你在SwiftUI中使用默认的UISlider,似乎没有办法删除步进器。唯一的方法是创建完全自定义的滑块,但我想我只会使用默认版本。

5cg8jx4n

5cg8jx4n2#

在Apple改进SwiftUI之前,实现这一点的方法是使用step参数提供自定义绑定 * 而不是 *:

Slider(value: Binding(get: { dailyGoalMinutes }, 
                      set: { newValue in
                                let base: Int = Int(newValue.rounded())
                                let modulo: Int = base % 10     // Your step amount. Here, 10.
                                dailyGoalMinutes = Double(base - modulo)
                            }), 
                      in: 0...1440)

在这个范例中,dailyGoalMinutes在检视上宣告如下:

@State private var dailyGoalMinutes: Double = 180.0

滑块允许用户以10分钟为增量在0到1,440分钟(1天)之间进行选择。虽然滑块本身在拖动时不会与这些增量对齐,但dailyGoalMinutes的值将在定义的范围内被适当地限制为10的倍数。
(Note:AppKit的行为方式相同;当NSSlider没有任何可见的刻度线时,滑块不会捕捉到值。)

相关问题