2

Button在SwiftUI中,我SpacerScrollView. 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 的测试中具有相同的行为。

我没主意了。似乎它应该是世界上最简单的事情,但我想不出办法解决这个问题。

任何帮助是极大的赞赏!

4

0 回答 0