美文网首页React Native
iOS原生页面中嵌套 React Native,侧滑返回手势冲突

iOS原生页面中嵌套 React Native,侧滑返回手势冲突

作者: 捷风 | 来源:发表于2017-07-06 10:52 被阅读1249次

前言:

项目中融入了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中,代码如下图

RN中基类方法

this.propstManger.addLengeData(this.props.navigator.getCurrentRoutes().length);这个方法是定义的RN与OC交互的管理类,在这里就不详细介绍了,

第二步:在项目中OC与RN交互的桥接中rnGetPoprolengNotification方法接收RN中传过来的导航层级并且通过一个单例将该值存储下来,如下图:

OC桥接中方法

第三步:在自定义的导航控制器里面的gestureRecognizerShouldBegin方法中进行判断是否调用OC系统的侧滑返回,如果RN里面已经到首层了,就调用OC的侧滑返回,如果RN里面不是首层的话,就禁止OC的侧滑返回,此时就会默认执行RN中的侧滑返回,截图如下:

导航控制器中代码

结语:由于表达能力有限,可能有些地方讲的不太清楚,没懂的地方,欢迎联系我,很乐意与大家相互交流。以上为自己的个人思路,如果太low的话,希望大神们不要见笑,谢谢!

相关文章

网友评论

  • 35ea932dfc04:请问一个RN问题,tabbar其中一个模块是RN写的,RN中根视图push到二级页,tabbar隐藏了,二级页中侧滑返回,回弹,未真正返回,此时tabbar显示了,请问如何隐藏
    捷风:@书中云 您好,请问你上面说的问题已经解决了吗?我没有遇到过你说的这个问题,但是我猜想的话,可以通过RN内部页面生命周期函数进行检测实现的,类似iOS系统的方法
  • 鹏雨燕:已经很棒棒了
  • Bear_HJ:我就奇怪了,这么严重的问题,网上居然找不到答案。难道就没有混合开发的吗?还是没有既会RN又会IOS的开发?
    Bear_HJ:@捷风 我用的StackNavigator
    Bear_HJ:@捷风 我这儿的navigator 没有getCurrentRouts 这个方法啊。 能提供具体一点的DEMO
    捷风:这个问题就不太清楚了。
  • 绘色:同样遇到这个问题,网上好像再没有遇到其他相同的问题了。。
    捷风:恩呢,是的,之前没想到解决办法的时候也是在网上找了很久!

本文标题:iOS原生页面中嵌套 React Native,侧滑返回手势冲突

本文链接:https://www.haomeiwen.com/subject/cifhhxtx.html