为什么SwiftUI中的Picker只能运行一次

时间:2020-02-02 18:24:02

标签: swift xcode swiftui picker

我从SwiftUI开始并创建了这段代码

struct ContentView: View {

let countries = ["CZ","SK","DE"]
@State private var country = 0

var body: some View {
    NavigationView {
        VStack {
            NavigationLink(destination: SettingsView()) {
                Text("Settings")
            }
            Form {
                Picker("Pick a country", selection: $country) {
                    ForEach(0..<countries.count) { index in
                        Text(self.countries[index])
                    }
                }
                Text(countries[country])
            }
        }
        .navigationBarTitle("UNECE Data")
    }
}
}

如果我从选择器中选择值,它将正确地将值返回给文本,但是如果我再次执行相同的操作,则不会显示值列表,并且XCode会将其写入控制台窗口

TableView仅警告一次:告诉UITableView布置其 可见单元格和其他内容,而无需处于视图层次结构 (表视图或其父视图之一尚未添加到 窗口)。通过强制将表视图内的视图强制为 在没有准确信息的情况下加载和执行布局(例如,表格视图 边界,特征收集,布局边距,安全区域插图等),以及 由于额外的布局,还将导致不必要的性能开销 通过。在以下位置建立符号断点 UITableViewAlertForLayoutOutsideViewHierarchy可以在 调试器,看看是什么原因导致这种情况的发生,因此可以避免这种情况 如果可能,请完全采取行动,或将其推迟到表格视图中 已添加到窗口中。

任何建议我都会感激。

2 个答案:

答案 0 :(得分:2)

是的,这是已知的错误,可以在实际设备上运行。不仅您烦人...

在您的情况下(要继续),只需单击“设置”,然后返回并选择器即可。顺便说一句,尝试单击“设置”,返回并再次尝试。链接“设置”具有相同的错误行为。

尝试从Apple获得的Master / Detail模板,仅添加一个Date并进行检查,以确保其工作方式相同。怎么可能? Swift运行时不再是应用程序的一部分(由于ABI)

它可在13.3以上的实际设备上运行,当前Xcode上的最新SDK仍为13.2。 (检查您的项目设置)

使用不同的Picker样式可能会有所帮助。

答案 1 :(得分:0)

这是iOS 13中引入的错误,显然只影响物理设备。将您的iOS系统更新为13.3,可以在真正的iPhone上正常运行,但警告仍然存在