iOS系統(tǒng)右滑返回手勢問題及解決方案

  • 在iOS7之后,蘋果推出了手勢滑動返回功能,也就是從屏幕左側(cè)向右滑動可返回上一個界面。大大提高了APP在大屏手機和iPad上的操作體驗,場景切換更加流暢。
  • 常見的問題有:

1.右滑手勢失效

2.右滑手勢與其他手勢沖突

3.右滑手勢導(dǎo)致應(yīng)用 Crash

4.右滑手勢的開啟與關(guān)閉

  • 了解一下 navigationItem 的幾個屬性
hidesBackButton                   - 是否隱藏原生返回按鈕,當(dāng)前控制器設(shè)置,當(dāng)前控制器有效
backBarButtonItem                 - 當(dāng)前控制器設(shè)置,下一級控制器生效
leftBarButtonItem                 - 當(dāng)前控制器設(shè)置,當(dāng)前控制器生效
leftBarButtonItems                - 當(dāng)前控制器設(shè)置,當(dāng)前控制器生效
leftItemsSupplementBackButton     - 在leftBarButtonItem設(shè)置之后,再設(shè)置該屬性可以控制backBarButtonItem的被覆蓋狀態(tài)

系統(tǒng)原生的右滑返回是OK的,但如果設(shè)置了 hidesBackButton 、 backBarButtonItem 、 leftBarButtonItem 、 leftBarButtonItems 幾個屬性,原生的右滑返回手勢就會失效。

  • 關(guān)于解決方式網(wǎng)上給了很多,但涉及到具體項目覺得使用攔截手勢代理回調(diào)的方式最為合理。

其一,可以很便捷地解決右滑失效、手勢沖突、右滑 Crash 等問題

其二,返回按鈕你可以隨意自定義

其三,在混合式開發(fā)中,可以在攔截的代理回調(diào)中給 web 跳轉(zhuǎn)也增加逐級返回體驗

  • 關(guān)鍵代碼如下 ,詳見 Demo

<UIGestureRecognizerDelegate>
self.navigationController.interactivePopGestureRecognizer.delegate = (id)self;
self.navigationController.interactivePopGestureRecognizer.enabled  = TRUE;

-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
    DLog(@" gestureRecognizerShouldBegin : %@ \n %@",gestureRecognizer,[gestureRecognizer class]);
    BOOL rlt = FALSE;
    // 手勢
    if(gestureRecognizer == self.navigationController.interactivePopGestureRecognizer){
        // 控制器堆棧
        if(self.navigationController.viewControllers.count >= 2){
            rlt = TRUE;
        }
    }
    return rlt;
}

其中可以將該部分代碼放在積累控制器設(shè)置或自定義導(dǎo)航欄控制器中設(shè)置;然后在不需要的控制器中使用 self.navigationController.interactivePopGestureRecognizer.enabled = FALSE; 單獨關(guān)閉即可

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

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

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