SwiftUI:如果在 ScrollView 中滚动,则禁用按钮选择
SwiftUI: Disable button selection if scrolling within ScrollView
我对 SwiftUI 感到困惑,我有一个垂直滚动视图,由垂直堆叠的按钮组成。当我开始滚动时,有两种结果:
- 如果我在手指放在按钮上时开始滚动,当滚动停止时,按钮操作会触发。
- 如果我的手指放在按钮之间的填充物上时开始滚动,当滚动停止时,不会发生任何操作。
我的问题:有什么方法可以防止在上面的场景 (1.) 中触发按钮操作,即禁用按钮或仅允许在滚动 stopped/motionless 时触发操作?
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()
。我考虑过尝试检测拖动开始的位置并将该点与屏幕上所有按钮的位置进行交叉引用,但这似乎有点过分。
如有任何帮助、建议或替代方案,我们将不胜感激!
尝试使用视图而不是按钮。使用点击手势和(可能)手势遮罩。
我对 SwiftUI 感到困惑,我有一个垂直滚动视图,由垂直堆叠的按钮组成。当我开始滚动时,有两种结果:
- 如果我在手指放在按钮上时开始滚动,当滚动停止时,按钮操作会触发。
- 如果我的手指放在按钮之间的填充物上时开始滚动,当滚动停止时,不会发生任何操作。
我的问题:有什么方法可以防止在上面的场景 (1.) 中触发按钮操作,即禁用按钮或仅允许在滚动 stopped/motionless 时触发操作?
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()
。我考虑过尝试检测拖动开始的位置并将该点与屏幕上所有按钮的位置进行交叉引用,但这似乎有点过分。
如有任何帮助、建议或替代方案,我们将不胜感激!
尝试使用视图而不是按钮。使用点击手势和(可能)手势遮罩。