繁体   English   中英

如何删除步骤 Slider SwiftUI

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM