通过视图将触摸传递给其下方的人员的正确方法是什么?

Gsp*_*Gsp 16 ios swift swiftui

我有一个显示在其他视图之上的 SwiftUI 视图,并且发现Color.clear像下面这样使用似乎允许触摸交互传递到其下的任何内容:

var body: some View {
    VStack {
        Spacer()
        HStack {
            Spacer()
            SomeCustomContent()
            Spacer()
        }
        .overlay(GeometryReader { proxy in
            Color.clear.preference(key: MyCustomHeightPreferenceKey.self, value: proxy.size.height)
        })
    }
}
Run Code Online (Sandbox Code Playgroud)

这是使触摸传递到下面的视图的正确方法,还是这只是 SwiftUI 行为中巧合的怪癖/错误,随着 swiftui 的成熟,苹果可能会修复/更改?

如果不是,传递触摸的正确方法是什么?

Sco*_*ant 26

您可以在不使用清晰颜色的情况下传递触摸事件,如下所示:

var body: some View {
    Rectangle()
        .overlay(
            Circle()
                .fill(.blue)
                .allowsHitTesting(false) // <--- Passes through gestures
        )
}
Run Code Online (Sandbox Code Playgroud)

Asperi 在上面的评论中提到了这个解决方案,您还可以在这里找到关于此主题的好博客:https ://www.hackingwithswift.com/books/ios-swiftui/disabling-user-interactivity-with-allowshittesting