前言:
項目中融入了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的話,希望大神們不要見笑,謝謝!