iOS7之后經(jīng)過滑動返回導航欄隱藏和顯示帶來的坑

摘自:http://www.itdecent.cn/p/6a5ea378a235
項目中添加右滑返回功能
首頁沒有導航欄,下一界面有導航欄,每次返回時候導航欄就消失了,百度了一下發(fā)現(xiàn)是設置NavigationBarHidden的問題,下面是摘自簡書中的內容,再次感謝博主的分享。

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];//帶動畫結果在切換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;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容