在 SwiftUI 中设计轮式选择器的样式?

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

我已经搜索了如何在 SwiftUI 中设置 WheelPickerStyle-pickers 样式的解决方案,特别是如果您想并排使用多个选择器。最后,我通过在各个选择器上使用填充和剪切来消除选择器之间的间隙。我不确定这是否是使用某些任意填充的好解决方案(将来可能会中断,或者如果用户使用更大的字体)。

现在我的第二个问题,也是这篇文章的主要问题。我可以更改所选项目的颜色/不透明度吗?我在项目中使用除黑/白以外的背景颜色,并且“选择栏”几乎不可见。

编辑:我发现我可以在每个选择器上使用 .contrast-modifier,但即使具有很高的值,也不足以满足我的口味。

import SwiftUI

struct ContentView: View {
    @State private var hours = 0
    @State private var minutes = 0
    @State private var seconds = 0
    
    var body: some View {
        HStack(spacing: 0) {

            Picker("Hours", selection: $hours) {
                ForEach(0 ..< 24) { hour in
                    Text("\(hour)")
                }
            }
            .pickerStyle(.wheel)
            .padding(.trailing, -15)
            .clipped()

            Picker("Minutes", selection: $minutes) {
                ForEach(0 ..< 60) { minute in
                    Text("\(minute)")
                }
            }
            .pickerStyle(.wheel)
            .padding(.horizontal, -15)
            .clipped()

            Picker("Seconds", selection: $seconds) {
                ForEach(0 ..< 60) { second in
                    Text("\(second)")
                }
            }
            .pickerStyle(.wheel)
            .padding(.leading, -15)
            .clipped()

        }
        .padding()
        .background(.blue.gradient)
    }
}

#Preview {
    ContentView()
}

背景颜色不是白色/黑色:

使用白色/中性背景,您可以更好地看到该栏:

这就是我想要的样式:

swiftui picker
1个回答
0
投票

您可以使用 SwiftUI-Introspect 库:

Picker("", selection: $selector) {
    // your items
}
.pickerStyle(.wheel)
.introspect(.picker(style: .wheel), on: .iOS(.v13, .v14, .v15, .v16, .v17)) { picker in
    picker.subviews[1].backgroundColor = UIColor.clear // or any color you want
}

您可以在这里找到该库:SwiftUI-Introspect

© www.soinside.com 2019 - 2024. All rights reserved.