Button
在SwiftUI中,我Spacer
在ScrollView
. ScrollView
窃取点击手势,因此永远Button
看不到点击。
因此,例如,此示例中的按钮不起作用:
struct DoesNotWork: View {
var body: some View {
ZStack {
VStack {
// Button doesn't work
Button("Tap This") {
print("Tapped")
}
Spacer()
}
VStack {
ScrollView {
Spacer()
.frame(height: 150)
Rectangle()
.foregroundColor(.blue)
.frame(height: 150)
Spacer()
}
}
}
}
}
这个版本——除了没有 ScrollView 其他一切都一样——工作正常:
struct ThisWorks: View {
var body: some View {
ZStack {
VStack {
// Button works normally
Button("Tap This") {
print("Tapped")
}
Spacer()
}
VStack {
Spacer()
.frame(height: 150)
Rectangle()
.foregroundColor(.blue)
.frame(height: 150)
Spacer()
}
}
}
}
这样就排除了 VStack、ZStack 和 Spacer。
我已经尝试.allowsHitTesting(false)
在 ScrollView 中的 Spacer 上使用,并且也尝试过.disabled(true)
(并结合使用)。添加.allowsHitTesting(false)
到 ScrollView 会使按钮工作,但当然会破坏 ScrollView。
我还尝试.foregroundColor(.clear)
在 Spacer 上进行设置。
对于它的价值,我在 Xcode 13.0 Beta 5 测试与 iOS 15.0 beta 7 以及 Xcode 12.5.1 与 iOS 14.7.1 的测试中具有相同的行为。
我没主意了。似乎它应该是世界上最简单的事情,但我想不出办法解决这个问题。
任何帮助是极大的赞赏!