Apple 自從iOS7之后增加了屏幕邊緣右滑返回交互的支持,再配合UINavigationController的交換動畫,pop上一級的操作變的非常帶感,從此我很少使用點擊左上角導航欄返回按鈕了的方式返回.如果一個App不支持滑動返回,那說明太不注重客戶體驗了,等iOS9出來后,基本上的App都支持7.0以上吧.
接下來講下滑動返回處理導航欄的顯示和隱藏如果開發(fā)者不好好理解這塊(動畫效果),很容易給項目帶來非常不好的體驗.
比如:利用系統(tǒng)的UINavigationBar時,返回手勢重若碰到前一個頁面有bar,后一個頁面沒bar,或者反過來時動畫非常難看,要解決此問題需要在滑動返回的后要出現(xiàn)的viewController中寫下面的代碼:
//隱藏
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:animated];
//很多同學習慣這樣寫
[self.navigationController setNavigationBarHidden:YES animated:YES];//帶動畫結(jié)果在切換tabBar的時候viewController會有閃動的效果不建議這樣寫
}
//顯示
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.navigationController setNavigationBarHidden:NO animated:animated];
}
為啥會這樣呢,我猜應該是UINavigationController 在導航欄控制API上設計的缺陷,一個UINavigationController管理了N個UIViewController棧式的push和pop,而UINavigationBar 有UINavigationController管理.這就導致了UIViewConstroller無法控制自己上面bar單獨隱藏和顯示,非常類似UIApplication全局的status bar,不過在iOS7之后為viewController控制自己的status bar 提供下面的幾個方法:
-(BOOL)prefersStatusBarHidden;
-(UIStatusBarStyle)preferredStatusBarStyle;
-(UIStatusBarAnimation)preferredStatusBarUpdateAnimation;