如何删除 Slider SwiftUI 中的步骤

问题描述 投票:0回答:2

我通过 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)
            }
        }
    }
}
ios swiftui uislider
2个回答
4
投票

在 Apple 改进 SwiftUI 之前,实现此目的的方法是使用 step 参数提供自定义绑定

INSTEAD OF

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 的倍数。

(注意:AppKit 的行为方式相同;当

NSSlider
没有任何可见刻度线时,滑块不会捕捉到值。)


0
投票

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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.