iOS原生頁(yè)面中嵌套 React Native,側(cè)滑返回手勢(shì)沖突解決方案

前言:

項(xiàng)目中融入了React Native,很多頁(yè)面都跟安卓那邊通用,很多程度節(jié)約了開(kāi)發(fā)時(shí)間,在開(kāi)發(fā)過(guò)程中,遇到比較棘手的問(wèn)題就是系統(tǒng)的側(cè)滑返回事件和React Native內(nèi)部的側(cè)滑返回手勢(shì)沖突,但是幸好最終還是攻克了這個(gè)難題,這個(gè)方案也是本人目前所能想到 的最好的方法,如果哪位大神又更完美的解決方案希望能相互交流下!

bug場(chǎng)景:

APP中部分頁(yè)面使用了React Native(RN),從原生頁(yè)面(A)跳轉(zhuǎn)到RN頁(yè)面(B),然后在RN頁(yè)面內(nèi)部跳轉(zhuǎn)到2級(jí)(B1)/3級(jí)(B2)...頁(yè)面,這個(gè)時(shí)候進(jìn)行側(cè)滑返回會(huì)直接回到原生頁(yè)面A,并不會(huì)回到RN內(nèi)部的上一級(jí)B1或者B2頁(yè)面,但是如果你不是從原生頁(yè)面跳轉(zhuǎn)進(jìn)RN頁(yè)面的話,不會(huì)存在這個(gè)問(wèn)題,會(huì)非常完美的側(cè)滑到上一級(jí)頁(yè)面。

解決方案:

第一步:在RN中的基類中的componentWillUnmount方法中將當(dāng)前頁(yè)面導(dǎo)航層級(jí)傳入到oc中,代碼如下圖

RN中基類方法

this.propstManger.addLengeData(this.props.navigator.getCurrentRoutes().length);這個(gè)方法是定義的RN與OC交互的管理類,在這里就不詳細(xì)介紹了,

第二步:在項(xiàng)目中OC與RN交互的橋接中rnGetPoprolengNotification方法接收RN中傳過(guò)來(lái)的導(dǎo)航層級(jí)并且通過(guò)一個(gè)單例將該值存儲(chǔ)下來(lái),如下圖:


OC橋接中方法

第三步:在自定義的導(dǎo)航控制器里面的gestureRecognizerShouldBegin方法中進(jìn)行判斷是否調(diào)用OC系統(tǒng)的側(cè)滑返回,如果RN里面已經(jīng)到首層了,就調(diào)用OC的側(cè)滑返回,如果RN里面不是首層的話,就禁止OC的側(cè)滑返回,此時(shí)就會(huì)默認(rèn)執(zhí)行RN中的側(cè)滑返回,截圖如下:

導(dǎo)航控制器中代碼

結(jié)語(yǔ):由于表達(dá)能力有限,可能有些地方講的不太清楚,沒(méi)懂的地方,歡迎聯(lián)系我,很樂(lè)意與大家相互交流。以上為自己的個(gè)人思路,如果太low的話,希望大神們不要見(jiàn)笑,謝謝!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容