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

Tal*_*lon 12 ios swift swiftui

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

\n

这是当前实现的代码片段,屏幕截图是目前在 iOS 15 模拟器中的样子。

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

截屏

\n

Tal*_*lon 20

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

\n
@State var selectedNumber: Int = 0\n\nvar body: some View {\n    Menu {\n        Picker(selection: $selectedNumber, label: EmptyView()) {\n            ForEach(0..<10) {\n                Text("\\($0)")\n            }\n        }\n    } label: {\n        customLabel\n    }\n}\n\nvar customLabel: some View {\n    HStack {\n        Image(systemName: "paperplane")\n        Text(String(selectedNumber))\n        Spacer()\n        Text("\xe2\x8c\xb5")\n            .offset(y: -4)\n    }\n    .foregroundColor(.white)\n    .font(.title)\n    .padding()\n    .frame(height: 32)\n    .background(Color.blue)\n    .cornerRadius(16)\n}\n
Run Code Online (Sandbox Code Playgroud)\n

  • 此方法似乎不会自动将列表居中于所选值。这是一个延伸到屏幕之外的长列表的问题。 (3认同)