So I have a
ScrollView holding a set of views:ScrollView {
ForEach(setOfData) { data in
NavigationLink(destination: ...) {
CustomView(data: data)
}
.buttonStyle(BackgroundButtonStyle())
}
}In a
CustomView I have a drag gesture:let drag = DragGesture()
.updating($gestureState) { value, gestureState, _ in
// ...
}
.onEnded { value in
// ...
}Which I assign to a part of the view:
ZStack(alignment: .leading) {
HStack {
// ...
}
HStack {
// ...
}
.gesture(drag)
// or .simultaneousGesture(drag)
}As soon as I attach the gesture, the
ScrollView stop scrolling. The only way to make it scroll it to start scrolling from a part of it which has no gesture attached. How can I avoid it and make them both work together. In UIKit is was as simple as specifying true in shouldRecognizeSimultaneouslyWithmethod. How can I have the same in SwiftUI?In SwiftUI I've tried attaching a gesture using
.simultaneousGesture(drag) and .highPriorityGesture(drag) – they all work the same as .gesture(drag). I've also tried providing all possible static GestureMask values for including: parameter – I have either scroll working or my drag gesture working. Never both of them.Adding a
simultaneousGesture to a ScrollViewdirectly make both of them work simultaneously. Even though I'm not sure it's even possible to get the View my gesture relates to and manipulate its subviews in this case. And even in this case it makes ScrollView behaving weird – it always generates accidental view taps on release when you end scrolling. So in my list you almost can't scroll without triggering a NavigationLink.