iOS 26中UINavigationController侧滑返回手势与Google Maps冲突及禁用中间区域侧滑的咨询
兄弟,这个问题我之前帮朋友排查过,iOS 26对导航控制器侧滑返回的触发范围做了扩大调整,确实会和Google Maps的拖动手势直接打架,给你几个亲测有效的解决办法:
最靠谱的方案:通过手势代理限制侧滑触发区域
我们可以利用UIGestureRecognizerDelegate的方法,只允许屏幕最左侧的小范围触发侧滑返回,中间和右侧的触摸事件全交给Google Maps处理。
具体实现步骤(Swift版)
- 在你的地图页面ViewController里,先拿到导航控制器的侧滑手势并设置代理:
override func viewDidLoad() { super.viewDidLoad() // 绑定侧滑手势的代理到当前VC navigationController?.interactivePopGestureRecognizer?.delegate = self }
- 实现UIGestureRecognizerDelegate的扩展,限制触发区域:
extension YourMapViewController: UIGestureRecognizerDelegate { // 控制触摸点是否能触发侧滑返回 func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool { // 只允许屏幕左侧20pt范围内的触摸触发侧滑(数值可以根据手感调整) let touchX = touch.location(in: view).x return touchX <= 20 } }
Objective-C版参考代码
如果你的项目是OC写的,逻辑完全一致:
- (void)viewDidLoad { [super viewDidLoad]; // 设置手势代理 self.navigationController.interactivePopGestureRecognizer.delegate = self; } - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { CGPoint touchPoint = [touch locationInView:self.view]; // 限制左侧20pt区域触发 return touchPoint.x <= 20; }
注意事项
- 20pt的数值可以根据你的需求调整,比如改成30pt适配大屏设备,只要保证是屏幕边缘的窄条区域就行
- 不要直接禁用整个
interactivePopGestureRecognizer,那样用户连边缘侧滑返回的功能都没了,完全没必要 - 这个方法不会影响Google Maps的任何手势操作,因为只有边缘的触摸会被系统侧滑捕获,中间区域的拖动、缩放都会正常交给地图控件
如果调整数值后还有小概率冲突,可以试试用gestureRecognizerShouldBegin:方法替换上面的代理方法,逻辑是一样的:
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { let touchX = gestureRecognizer.location(in: view).x return touchX <= 20 }
亲测这个方案完美解决了iOS 26里Google Maps和侧滑返回的冲突,你可以直接拿去用~




