本文介绍了为什么这个 SwiftUI Picker 代码不起作用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Xcode:11.2.1

Xcode: 11.2.1

下面的代码是一个包含两个组件的简单表单;一个选择器(选择一个字母)和一个文本(显示所选字母).代码编译并运行,但是当一个字母被选中时,它不会出现在Selected..."文本中.此外,Xcode 会在第一次(仅)选择一个字母时显示(虚假的?)运行时警告..

The code below is for a simple form with two components; a Picker (to select a letter) and a Text (to display the selected letter). The code compiles and runs but, when a letter is selected it does not appear in the "Selected..." text. In addition, Xcode displays a (spurious?) run time warning the first time (only) a letter is selected..

struct ContentView: View {

    @State private var letter = ""
    private let letters = ["Alpha", "Bravo", "Charlie"]

    var body: some View {
        NavigationView {
            Form {
                Picker("Select a letter", selection: $letter) {
                    ForEach(0..<letters.count) {
                        Text(self.letters[$0])
                    }
                }
                Text("Selected letter: \(letter)")
            }
            .navigationBarTitle("Main Menu")
        }
    }
}

有关信息:运行时警告:

For info: the run time warning:

[TableView] 仅警告一次:UITableView 被告知要对其进行布局不在视图层次结构中的可见单元格和其他内容(表视图或其超视图之一尚未添加到窗户).这可能会通过强制表视图中的视图来导致错误加载和执行没有准确信息的布局(例如表视图边界、特征集合、布局边距、安全区域插入等),以及由于额外的布局也会造成不必要的性能开销通过.在以下位置创建一个符号断点UITableViewAlertForLayoutOutsideViewHierarchy 在调试器并查看导致这种情况发生的原因,这样您就可以避免这种情况如果可能的话,完全采取行动,或者推迟到表视图有已添加到窗口.表视图:<_TtC7SwiftUIP33_BFB370BA5F1BADDC9D83021565761A4925UpdateCoalescingTableView:0x7f8b33872600;baseClass = UITableView;帧 = (0 0; 414 896);clipsToBounds = YES;自动调整大小 = W+H;手势识别器 = ;层 = ;内容偏移:{0,-140};内容大小:{414, 205.33333333333337};调整内容插入:{140, 0, 34, 0};数据源:<_TtGC7SwiftUIP10$10f5cd23419ListCoreCoordinatorGVS_20SystemListDataSourceOs5Never_GOS_19SelectionManagerBoxS2___:0x7f8b33407a70>>

推荐答案

Picker 中的 ForEach 类型应与选择类型对齐.

ForEach types inside Picker should be aligned with selection type.

这是一个应该适合您的更正代码:

Here is a corrected code that should work for you:

@State private var letter = ""
private let letters = ["Alpha", "Bravo", "Charlie"]

var body: some View {
    NavigationView {
        Form {
            Picker("Select a letter", selection: $letter) {
                ForEach(letters, id: \.self) { option in
                    Text(option)
                }
            }
            Text("Selected letter: \(letter)")
        }
        .navigationBarTitle("Main Menu")
    }
}

这篇关于为什么这个 SwiftUI Picker 代码不起作用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-29 17:32
查看更多