[英]How to remove Steps in Slider SwiftUI
我通过 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)
}
}
}
}
尝试研究并询问了一些导师,但如果您在 SwiftUI 中使用默认的 UISlider,似乎没有办法移除步进器。 唯一的方法是创建完全自定义的 Slider,但我想我只会使用默认版本。
在 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
slider 允许用户以 10 分钟为增量在 0 到 1,440 分钟(1 天)之间 select。 虽然 slider 本身不会在拖动时捕捉到这些增量,但dailyGoalMinutes
的值将被适当地限制为定义范围内的 10 的倍数。
(注意:AppKit 的行为方式相同;当NSSlider
没有任何可见的刻度线时,slider 不会捕捉到值。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.