SwiftUI中携带LongPressGesture的视图导致TabView滑动手势失效问题
解决方案
你需要将自定义长按手势的优先级设置为低于系统手势,直接使用SwiftUI内置的lowPriorityGesture修饰符替换原有的gesture修饰符即可实现需求,该修饰符会让系统内置手势优先响应,系统手势识别失败时才会触发你自定义的长按手势。
修改代码示例
将你原有视图上的手势绑定代码:
.gesture( LongPressGesture().updating(self.$isDetectingLongPress) { currentState, gestureState, transaction in gestureState = currentState } .onEnded { _ in self.toggleSheet.toggle() } )
替换为:
.lowPriorityGesture( LongPressGesture().updating(self.$isDetectingLongPress) { currentState, gestureState, transaction in gestureState = currentState } .onEnded { _ in self.toggleSheet.toggle() } )
补充说明
如果你的业务场景需要两个手势可以同时识别,可以用simultaneousGesture修饰符替换gesture修饰符,即可实现滑动和长按手势互不拦截同时响应。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

