SwiftUI 自定义选取器标签未呈现

Posted

技术标签:

【中文标题】SwiftUI 自定义选取器标签未呈现【英文标题】:SwiftUI Custom Picker Label Not Rendering 【发布时间】:2021-09-29 18:02:01 【问题描述】:

更新到 ios 15 和 Xcode 13 后,我的应用中的选择器不再显示自定义标签。在 iOS 14 设备上运行应用程序,选择器呈现良好。

这是当前实现的代码 sn-p,截图是它目前在 iOS 15 模拟器中的样子。

    @State var selectedNumber: Int = 0
    
    var body: some View 
        Picker(selection: $selectedNumber, label: customLabel) 
            ForEach(0..<10) 
                Text("\($0)")
            
        
    
    
    var customLabel: some View 
        HStack 
            Image(systemName: "paperplane")
            Text(String(selectedNumber))
            Spacer()
            Text("⌵")
                .offset(y: -4)
        
        .foregroundColor(.white)
        .font(.title)
        .padding()
        .frame(height: 32)
        .background(Color.blue)
        .cornerRadius(16)
    

【问题讨论】:

使用里面有选择器的菜单,就像我在这里的回答:***.com/a/68897763/1601849 【参考方案1】:

@Adam 提供的答案有效。以下是我为防止其他人偶然发现问题所做的修复。

    @State var selectedNumber: Int = 0
    
    var body: some View 
        Menu 
            Picker(selection: $selectedNumber, label: EmptyView()) 
                ForEach(0..<10) 
                    Text("\($0)")
                
            
         label: 
            customLabel
        
    
    
    var customLabel: some View 
        HStack 
            Image(systemName: "paperplane")
            Text(String(selectedNumber))
            Spacer()
            Text("⌵")
                .offset(y: -4)
        
        .foregroundColor(.white)
        .font(.title)
        .padding()
        .frame(height: 32)
        .background(Color.blue)
        .cornerRadius(16)
    

【讨论】:

此方法似乎不会将列表自动居中于所选值。长列表超出屏幕是个问题。【参考方案2】:

您可以使用菜单选项作为标签

Menu("Drop Your Label Here") 
                Picker("Please choose a color", selection: $selectedColor)
                
                    ForEach(colors, id: \.self) 
                        Text($0)
                    
                
                
            
            //.foregroundColor(Color.init("Red"))
            .foregroundColor(Color.red)
        .frame(width: 300, height: 60)

【讨论】:

以上是关于SwiftUI 自定义选取器标签未呈现的主要内容,如果未能解决你的问题,请参考以下文章

在自定义选取器中重新加载数据

SwiftUI - 可滚动的 ListView,对象未正确呈现

SwiftUI选取器选择指标不尊重框架宽度

背水一战 Windows 10 (94) - 选取器: 自定义文件打开选取器

SwiftUI实战-自定义弹窗

SwiftUI:导航链接中的自定义标签显示为灰色