- 在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)閉即可