需求
我們在開發(fā)中經(jīng)常遇見這樣的需求,就是A視圖沒有導航,pushB視圖后導航欄。然后要求可以使用iOS的系統(tǒng)側(cè)滑返回功能。類似如下的功能:
問題
在處理這個需求的時候,我們一般會遇到兩個問題:
右滑返回手勢
ios開發(fā)中,使用push視圖,系統(tǒng)是有默認的側(cè)滑返回上個視圖的功能。但是當我們自定義導航欄時,這個手勢的事件就沒有再觸發(fā),此時只要我們重新將代理設(shè)置為controller即可。
代碼示例:
在BaseViewController中添加如下的代碼
//開啟 push視圖 右滑手勢() fileprivate func openSwipe(){ if(self.navigationController != nil){ self.navigationController!.interactivePopGestureRecognizer!.delegate = self; } } func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { if self.navigationController?.viewControllers.count == 1{ return false; } return true; }
或者在BaseNavigationController中添加如下代碼:
extension BaseNavigationController:UIGestureRecognizerDelegate{ override func viewDidLoad() { super.viewDidLoad() self.interactivePopGestureRecognizer?.delegate = self } func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { if self.navigationController?.viewControllers.count == 1{ return false; } return true; }}
右劃返回時導航欄的隱藏問題
oc代碼:
-(void)viewWillAppear:(BOOL)animated{ [self.navigationController setNavigationBarHidden:YES animated:true];}-(void)viewWillDisappear:(BOOL)animated{ [self.navigationController setNavigationBarHidden:NO animated:false];}
Swift代碼:
override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(false); self.navigationController?.setNavigationBarHidden(true, animated: true) } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated); self.navigationController?.navigationBar.isHidden = false; }
注意點
我們隱藏導航欄的時候,務(wù)必使用animated為true.這樣在右劃返回視圖的時候才不會突兀,否則則會是下面的效果。剛開始滑動,導航欄就全不見了。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網(wǎng)。
|
新聞熱點
疑難解答