【问题标题】:Why Picker in SwiftUI works just one time为什么 SwiftUI 中的 Picker 只工作一次
【发布时间】:2020-05-18 14:50:20
【问题描述】:

我从 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")
    }
}
}

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

TableView 仅警告一次:UITableView 被告知布局其 可见单元格和其他内容,而不在视图层次结构中 (表视图或其超级视图之一尚未添加到 窗户)。这可能会通过强制表视图中的视图来导致错误 在没有准确信息的情况下加载和执行布局(例如表格视图 边界、特征集合、布局边距、安全区域插入等),以及 由于额外的布局也会导致不必要的性能开销 通过。在 UITableViewAlertForLayoutOutsideViewHierarchy 在 调试器并查看导致这种情况发生的原因,因此您可以避免这种情况 如果可能的话完全采取行动,或者推迟到表格视图有 已添加到窗口中。

我会很感激任何建议。

【问题讨论】:

    标签: swift xcode swiftui picker


    【解决方案1】:

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

    【讨论】:

    • 其实我不是在物理设备上运行代码,而是在 XCode 模拟器上运行。我已将 macOS 和 XCode 更新到最新的最佳版本。
    • 亲爱的投反对票的人,不要仅仅因为你不喜欢就投反对票。他的回答,是真的! NavigationLink 有一个解决方法,您可以在其中以编程方式激活链接,对于 Picker 来说,这并不容易......最后不存在简单的解决方案。
    【解决方案2】:

    是的,这是已知的错误,在真实设备上它可以工作。不只是你烦人……

    在您的情况下(为了能够继续)您的开发,只需单击“设置”,然后返回,选择器再次准备就绪。对了,尝试点击“设置”,返回再试一次。 “设置”链接也有同样的错误行为。

    试试苹果的 Master / Detail 模板,只添加一个 Date 并检查它是否会以相同的方式工作。怎么可能? Swift 运行时不再是应用程序的一部分(由于 ABI)

    它适用于 13.3 的真实设备,当前 Xcode 上的最后一个 SDK 仍然是 13.2。 (检查您的项目设置)

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

    【讨论】:

    • 是的,如果我从表单中移动 Picker 并将其用作纺车,这将正常工作。
    • Dawy,“设置”链接仍然存在问题。在您有两个链接之前,只需单击另一个链接,您就有机会在模拟器中继续该应用程序。现在你只有一个....试试我伤心的,点击设置,返回,再点击一次...不要担心这个错误,它真的只是暂时的......最后它不会真实设备上的任何问题。
    • 这不是 Picker 错误!是 NavigationView 造成了麻烦:-)
    • 如果我将点击设置和点击选择器结合起来,它可以工作。
    猜你喜欢
    • 2012-03-09
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 2019-10-08
    • 1970-01-01
    • 2017-05-29
    • 2021-03-30
    相关资源
    最近更新 更多