Swift NavigationBar隱藏後的右滑手勢
阿新 • • 發佈:2019-01-21
需求
我們在開發中經常遇見這樣的需求,就是A檢視沒有導航,pushB檢視後導航欄。然後要求可以使用iOS的系統側滑返回功能。類似如下的功能:
問題
在處理這個需求的時候,我們一般會遇到兩個問題:
右滑返回手勢
iOS開發中,使用push檢視,系統是有預設的側滑返回上個檢視的功能。但是當我們自定義導航欄時,這個手勢的事件就沒有再觸發,此時只要我們重新將代理設定為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.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;
}
注意點
我們隱藏導航欄的時候,務必使用animated為true.這樣在右劃返回檢視的時候才不會突兀,否則則會是下面的效果。剛開始滑動,導航欄就全不見了。