You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

iOS 26中UINavigationController侧滑返回手势与Google Maps冲突及禁用中间区域侧滑的咨询

iOS 26中UINavigationController侧滑返回手势与Google Maps冲突及禁用中间区域侧滑的咨询

兄弟,这个问题我之前帮朋友排查过,iOS 26对导航控制器侧滑返回的触发范围做了扩大调整,确实会和Google Maps的拖动手势直接打架,给你几个亲测有效的解决办法:

最靠谱的方案:通过手势代理限制侧滑触发区域

我们可以利用UIGestureRecognizerDelegate的方法,只允许屏幕最左侧的小范围触发侧滑返回,中间和右侧的触摸事件全交给Google Maps处理。

具体实现步骤(Swift版)

  1. 在你的地图页面ViewController里,先拿到导航控制器的侧滑手势并设置代理:
override func viewDidLoad() {
    super.viewDidLoad()
    // 绑定侧滑手势的代理到当前VC
    navigationController?.interactivePopGestureRecognizer?.delegate = self
}
  1. 实现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和侧滑返回的冲突,你可以直接拿去用~

火山引擎 最新活动