前言:
項目中融入了React Native板辽,很多頁面都跟安卓那邊通用奇瘦,很多程度節(jié)約了開發(fā)時間,在開發(fā)過程中劲弦,遇到比較棘手的問題就是系統(tǒng)的側(cè)滑返回事件和React Native內(nèi)部的側(cè)滑返回手勢沖突耳标,但是幸好最終還是攻克了這個難題,這個方案也是本人目前所能想到 的最好的方法邑跪,如果哪位大神又更完美的解決方案希望能相互交流下次坡!
bug場景:
APP中部分頁面使用了React Native(RN),從原生頁面(A)跳轉(zhuǎn)到RN頁面(B)画畅,然后在RN頁面內(nèi)部跳轉(zhuǎn)到2級(B1)/3級(B2)...頁面砸琅,這個時候進行側(cè)滑返回會直接回到原生頁面A,并不會回到RN內(nèi)部的上一級B1或者B2頁面轴踱,但是如果你不是從原生頁面跳轉(zhuǎn)進RN頁面的話症脂,不會存在這個問題,會非常完美的側(cè)滑到上一級頁面。
解決方案:
第一步:在RN中的基類中的componentWillUnmount方法中將當前頁面導航層級傳入到oc中诱篷,代碼如下圖
this.propstManger.addLengeData(this.props.navigator.getCurrentRoutes().length);這個方法是定義的RN與OC交互的管理類沸版,在這里就不詳細介紹了,
第二步:在項目中OC與RN交互的橋接中rnGetPoprolengNotification方法接收RN中傳過來的導航層級并且通過一個單例將該值存儲下來兴蒸,如下圖:
第三步:在自定義的導航控制器里面的gestureRecognizerShouldBegin方法中進行判斷是否調(diào)用OC系統(tǒng)的側(cè)滑返回视粮,如果RN里面已經(jīng)到首層了,就調(diào)用OC的側(cè)滑返回橙凳,如果RN里面不是首層的話蕾殴,就禁止OC的側(cè)滑返回,此時就會默認執(zhí)行RN中的側(cè)滑返回岛啸,截圖如下:
結(jié)語:由于表達能力有限钓觉,可能有些地方講的不太清楚,沒懂的地方坚踩,歡迎聯(lián)系我荡灾,很樂意與大家相互交流。以上為自己的個人思路瞬铸,如果太low的話批幌,希望大神們不要見笑,謝謝!