【发布时间】:2020-04-08 11:28:12
【问题描述】:
Xcode 11.3 (11C29).
macOS 10.15.2.
在下面的 SwiftUI 视图中有两个按钮。一个打印“OK”,另一个打印“Cancel”。但是,无论按下哪个按钮,都会执行两个打印语句。 为什么会这样? (我认为它一定是一个 SwiftUI 错误。)
struct ContentView: View {
var body: some View {
List {
HStack {
Button("OK") {
print("OK.")
}
Button("Cancel") {
print("Cancel")
}
}
}
}
}
(如果 List 或 HStack 被注释掉,那么每个按钮只打印自己的语句。)
【问题讨论】:
-
注意:我只在 iPhone X 模拟器上运行了这段代码,直到明天才能访问我的实际 iPhone X。问题可能只存在于模拟器上。
-
关于信息:我现在已经在我的 iPhone X 上重现了这个问题。我可以轻松地解决这个问题。真正的问题是:为什么会存在这个问题?是什么原因造成的?
-
一年后,iOS 14.3 设备和模拟器上的 Xcode 12.3 仍然是一个 Bug。即使没有列表但有一个包含按钮的简单 ForEach 也会发生在我身上。看起来 SwiftUI 以错误的方式重用了按钮视图。在我的案例中,我可以看到两个按钮上的触摸突出显示。
标签: list button swiftui hstack