我通过 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)
}
}
}
}
在 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
没有任何可见刻度线时,滑块不会捕捉到值。)
尝试过研究并询问了一些导师,但如果您在 SwiftUI 中使用默认的 UISlider,似乎无法删除步进器。唯一的方法是创建完全自定义的滑块,但我想我只会使用默认版本。