SwiftUI:如果在ScrollView中滚动,则禁用按钮选择

时间:2019-11-25 04:23:17

标签: swift xcode scrollview swiftui gesture

我在SwiftUI的泡菜中,有一个垂直的ScrollView,其中包含垂直堆叠的按钮。当我开始滚动时,有两个结果:

  1. 如果我在手指放在按钮上时开始滚动,则当滚动停止时,按钮动作将触发。
  2. 如果我在手指位于按钮之间的填充上时开始滚动,则在滚动停止时不会发生任何动作。

我的问题:在上述情况(1.)中,有什么方法可以防止按钮动作被触发,即禁用按钮或仅在滚动停止/静止不动时才触发该动作吗?

ScrollView(.vertical) {

    ForEach(0...5, id: \.self) { i in

        VStack(alignment: .leading, spacing: 15) {

            Button(action: {
                print("selected")
            }) {
                Text("Button \(i)")
            }
        }
    }
}

我尝试在代码块后标记.gesture(),但是它只能识别DragGesture().onChanged(),而不能识别DragGesture().onEnded()。我已经考虑过尝试检测拖动起点的位置以及与屏幕上所有按钮的位置进行交叉引用的位置,但这似乎有点多余。

任何帮助,建议或替代方案都将受到赞赏!

1 个答案:

答案 0 :(得分:2)

尝试使用视图而不是按钮。带有点击手势和(也许)手势遮罩。