前言:
项目中融入了React Native,很多页面都跟安卓那边通用,很多程度节约了开发时间,在开发过程中,遇到比较棘手的问题就是系统的侧滑返回事件和React Native内部的侧滑返回手势冲突,但是幸好最终还是攻克了这个难题,这个方案也是本人目前所能想到 的最好的方法,如果哪位大神又更完美的解决方案希望能相互交流下!
bug场景:
APP中部分页面使用了React Native(RN),从原生页面(A)跳转到RN页面(B),然后在RN页面内部跳转到2级(B1)/3级(B2)...页面,这个时候进行侧滑返回会直接回到原生页面A,并不会回到RN内部的上一级B1或者B2页面,但是如果你不是从原生页面跳转进RN页面的话,不会存在这个问题,会非常完美的侧滑到上一级页面。
解决方案:
第一步:在RN中的基类中的componentWillUnmount方法中将当前页面导航层级传入到oc中,代码如下图
this.propstManger.addLengeData(this.props.navigator.getCurrentRoutes().length);这个方法是定义的RN与OC交互的管理类,在这里就不详细介绍了,
第二步:在项目中OC与RN交互的桥接中rnGetPoprolengNotification方法接收RN中传过来的导航层级并且通过一个单例将该值存储下来,如下图:
第三步:在自定义的导航控制器里面的gestureRecognizerShouldBegin方法中进行判断是否调用OC系统的侧滑返回,如果RN里面已经到首层了,就调用OC的侧滑返回,如果RN里面不是首层的话,就禁止OC的侧滑返回,此时就会默认执行RN中的侧滑返回,截图如下:
结语:由于表达能力有限,可能有些地方讲的不太清楚,没懂的地方,欢迎联系我,很乐意与大家相互交流。以上为自己的个人思路,如果太low的话,希望大神们不要见笑,谢谢!