需求
我們在開發中經常遇見這樣的需求,就是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.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;
}
注意點
我們隱藏導航欄的時候,務必使用animated為true.這樣在右劃返回視圖的時候才不會突兀,否則則會是下面的效果。剛開始滑動,導航欄就全不見了。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持html5模板網。
【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!