将选择器默认设置为无可点击值作为标题

Set picker default no clickable value as title

我正在尝试开发一个 Picker,其中包含与标题对应的字段。问题是我不明白如何使用 Picker 视图的标题字段。

这是代码。问题是 Pickerstring "Spain" 作为标题。相反,我想要标题 "Select country" 在用户 select 字段之前可见。

struct CustomPicker: View {
    
    @State private var selection = "Select country"
    let colors = ["Spain", "France"]
    
    var body: some View {
        VStack(alignment: .leading, spacing: 4, content: {
    
            HStack(spacing: 15) {
                
                Picker("Select country", selection: $selection) {
                    ForEach(colors, id: \.self) {
                        Text([=10=])
                    }
                }
                .pickerStyle(DefaultPickerStyle())
            }
            
            .padding(.horizontal, 20)
        })
            .frame(height: 50)
            .background(.white)
            .cornerRadius(10)
            .padding(.horizontal, 20)
    }
}

您尝试做的事情并不是 Swift 的标准UI。您必须为此自定义 UI(这可能并不难)。根据您愿意妥协的程度,您可以通过稍微调整代码来获得您想要的东西。这是列表中选择器的样子(以及列表中的选择器)。

为此,我稍微修改了您的代码以包含国家/地区的枚举。

enum Country: String, CaseIterable, Identifiable {
    case spain, france, germany, switzerland
    var id: Self { self }
}

struct CustomPicker: View {
    
    @State private var selection: Country = .spain
    
    var body: some View {
        NavigationView {
            List {
                Picker("Select Country", selection: $selection) {
                    ForEach(Country.allCases, id: \.self) {
                        Text([=10=].rawValue.capitalized)
                            .tag([=10=])
                    }
                }
                Picker("Select Country", selection: $selection) {
                    ForEach(Country.allCases, id: \.self) {
                        Text([=10=].rawValue.capitalized)
                            .tag([=10=])
                    }
                }
                .pickerStyle(.menu)
            }
            .navigationBarTitleDisplayMode(.inline)
            .navigationTitle("Country Picker")
        }
    }
}