需求
我們在開發(fā)中經(jīng)常遇見這樣的需求,就是A視圖沒有導(dǎo)航,pushB視圖后導(dǎo)航欄。然后要求可以使用iOS的系統(tǒng)側(cè)滑返回功能。類似如下的功能:
問題
在處理這個需求的時候,我們一般會遇到兩個問題:
右滑返回手勢
ios開發(fā)中,使用push視圖,系統(tǒng)是有默認(rèn)的側(cè)滑返回上個視圖的功能。但是當(dāng)我們自定義導(dǎo)航欄時,這個手勢的事件就沒有再觸發(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;
}
}
右劃返回時導(dǎo)航欄的隱藏問題
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;
}
注意點(diǎn)
我們隱藏導(dǎo)航欄的時候,務(wù)必使用animated為true.這樣在右劃返回視圖的時候才不會突兀,否則則會是下面的效果。剛開始滑動,導(dǎo)航欄就全不見了。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持html5模板網(wǎng)。
【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請聯(lián)系我們刪除處理,感謝您的支持!