Swiftui 快捷界面覆盖取消触摸

Swiftui 快捷界面覆盖取消触摸,swiftui,Swiftui,我有一个按钮,我想把一个半透明的渐变叠加在上面 Button(action: { print("Pressed") }) { Text("Press me") } .overlay( LinearGradient( gradient: Gradient(colors: [.clear, Color.black.opacity(0.3)]), startPoint: .top, endPoint: .bottom ).disabled(true) ) 即使

我有一个按钮,我想把一个半透明的渐变叠加在上面

Button(action: {
  print("Pressed")
}) {
  Text("Press me")
}
.overlay(
  LinearGradient(
    gradient: Gradient(colors: [.clear, Color.black.opacity(0.3)]),
    startPoint: .top,
    endPoint: .bottom
  ).disabled(true)
)
即使渐变已禁用(true),它仍然会吃掉触摸,并且不会将触摸转发到实际按钮
.allowsHitTesting(false)
提供相同的结果

你知道会出什么问题吗

注意:我知道我可以将叠加设置为文本(“按我”),但我不想要它。(这只是说明问题的示例代码)



编辑:这个问题在Xcode 11.2中得到了解决✅

以下代码适用于Xcode 11.2/iOS 13.2

struct TestButtonWithOverlay: View {
    var body: some View {
        Button(action: {
            print("Pressed")
        }) {
            Text("Press me")
                .padding()
        }

        .overlay(
            LinearGradient(
                gradient: Gradient(colors: [.clear, Color.black.opacity(0.3)]),
                startPoint: .top,
                endPoint: .bottom
            )
            .allowsHitTesting(false) // !!! must be exactly here
        )
    }
}

struct TestButtonWithOverlay_Previews: PreviewProvider {
    static var previews: some View {
        TestButtonWithOverlay()
    }
}

您在按钮前面创建了一个渐变视图,该视图没有用户交互,无法进入按钮。在.overlay之后使用.background或add.ontapsignature代替.overlay。我可以在Xcode 11.2 FWIW中确认这是有效的,当在滚动视图顶部覆盖视图时,这似乎不起作用;用户无法滚动。在文本字段顶部覆盖文本时不起作用。当您点击文本标签时,文本字段永远不会与之交互。