我想在SwiftUI中创建带有值标签的滑块.

我写了下面的代码.

struct SliderView: View {
    @State private var speed = 50.0
    var minValue: Double = 1
    var maxValue: Double = 100
    var body: some View {
        VStack {
            Text("\(speed,specifier: "%.f")")
                .foregroundColor(.blue)

            Slider(
                value: $speed,
                in: minValue...maxValue,
                step: 1
            ) {
                Text("Speed")
            } minimumValueLabel: {
                Text("\(minValue,specifier: "%.f")")
            } maximumValueLabel: {
                Text("\(maxValue,specifier: "%.f")")
            }

        }.padding()
    }
}

但我想用滑块拇指移动值标签.

我找不到任何属性将.frame设置为Y值.

Question:

如何使用拇指移动滑块值标签和使用拇指更改移动标签值.

enter image description here

enter image description here

enter image description here

推荐答案

这里的问题是,我们无法访问nob大小和位置(它们是私有的),只能参考范围和当前值,这导致滑块的nob和悬停值之间出现一些错位.

无论如何,这里是使用对齐指南的可能方法.调到我留给你的nob大小.

使用Xcode 13.4/iOS 15.5测试

demo

struct SliderView: View {
    @State private var speed = 50.0

    var minValue: Double = 1
    var maxValue: Double = 100

    var body: some View {
        HStack {
            Text("\(minValue,specifier: "%.f")")
            Slider(value: $speed, in: minValue...maxValue, step: 1)
                .alignmentGuide(VerticalAlignment.center) { $0[VerticalAlignment.center]}
                .padding(.top)
                .overlay(GeometryReader { gp in
                    Text("\(speed,specifier: "%.f")").foregroundColor(.blue)
                        .alignmentGuide(HorizontalAlignment.leading) {
                            $0[HorizontalAlignment.leading] - (gp.size.width - $0.width) * speed / ( maxValue - minValue)
                        }
                        .frame(maxWidth: .infinity, alignment: .leading)
                }, alignment: .top)
            Text("\(maxValue,specifier: "%.f")")
        }
        .padding()
    }
}

Test module on GitHub

Ios相关问答推荐

当重新呈现UI时,嵌套的 struct 值如何与@Observable一起工作?

使用SWIFT传输表示时的条件文件表示格式

AVFoundation Camera推出变焦SWIFT

WatchConnectivity - 从手表配套应用程序在 iOS 设备上启动 AVPlayer

如何结合`@dynamicMemberLookup`和`ExpressibleByStringInterpolation`来实现方法链?

NavigationLink 只能在文本部分点击

SwiftUI - TextField - 在焦点上清除 Double 类型的值,在取消 Select 时恢复

如何擦除 Swift 中的 Core Graphics Context 绘图?

如何在 SwiftUI 的 TabView 中添加底部曲线?

如何根据设备时间设置 Flutter 应用时间线?

TextField 重复输入 SwiftUI

iOS 中的 [Class new] 和 [[Class alloc] init] 有什么区别?

如何使用 Swift 从assets资源 中加载特定图像

在 Grand Central Dispatch 中使用 dispatch_sync

用 PC 调试 ipad safari

检测 iOS UIDevice 方向

如何在上传到服务器之前在 iOS 上压缩/调整图像大小?

正确的领域使用模式/最佳实践?

Swift - 获取设备的 WIFI IP 地址

NSURL 到带有 XCTest 的测试包中的文件路径