如何優雅解決導航欄隱藏問題

iOS 導航欄的正確隱藏方式

簡介

在項目中經常碰到首頁頂部是無限輪播,需要靠最上面顯示.有的設置導航欄為透明等一系列的方法,這個可以借助第三方.或者干脆簡單粗暴的直接隱藏掉導航欄.可是push到下一個頁面的時候是需要導航欄的,如何做了,這里給出兩種方法.

第一種做法

注意這里一定要用動畫的方式隱藏導航欄,這樣在使用滑動返回手勢的時候效果最好,和上面動圖一致.這樣做有一個缺點就是在切換tabBar的時候有一個導航欄向上消失的動畫.

- (void)viewWillAppear:(BOOL)animated {

? ?[super viewWillAppear:animated];

? ?[self.navigationController setNavigationBarHidden:YES animated:YES];

}

- (void)viewWillDisappear:(BOOL)animated {

? ?[super viewWillDisappear:animated];

? ?[self.navigationController setNavigationBarHidden:NO animated:YES];

}

第二種做法

設置self為導航控制器的代理,實現代理方法,在將要顯示控制器中設置導航欄隱藏和顯示,使用這種方式不僅完美切合滑動返回手勢,同時也解決了切換tabBar的時候,導航欄動態隱藏的問題.

@interface WLHomePageController ()

@end

@implementation WLHomePageController

#pragma mark - lifeCycle

- (void)viewDidLoad {

? ?[super viewDidLoad];

? ?// 設置導航控制器的代理為self

? ?self.navigationController.delegate = self;

}

#pragma mark - UINavigationControllerDelegate

// 將要顯示控制器

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {

? ?// 判斷要顯示的控制器是否是自己

? ?BOOL isShowHomePage = [viewController isKindOfClass:[self class]];

? ?[self.navigationController setNavigationBarHidden:isShowHomePage animated:YES];

}


Demo:https://github.com/wangyansnow/WYNagigationDemo

http://gold.xitu.io/entry/57b52d5079bc44005e0e77f7

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 背景 最近要做一個需求,需要把其中兩個頁面做成全屏的(無導航欄)。我把這個主要的代碼抽出來上傳到github上,導...
    半邪亦正閱讀 16,178評論 19 54
  • 有感 ....請允許我在文章開篇爆句粗口, 就這導航欄錯亂這 Bug, 我真日了狗了. 自從測試小伙伴發現這個問...
    李國安閱讀 6,446評論 59 108
  • 1.自定義控件 a.繼承某個控件 b.重寫initWithFrame方法可以設置一些它的屬性 c.在layouts...
    圍繞的城閱讀 3,475評論 2 4
  • { 11、核心動畫 需要簽協議,但是系統幫簽好 一、CABasicAnimation 1、創建基礎動畫對象 CAB...
    CYC666閱讀 1,589評論 2 4
  • 影波的婚禮上,哭得最兇的不是身為新娘的丁丁,她有哭,但是是被新郎感人的告白以及那枚心儀已久的婚戒感動的,模糊了新娘...
    燈歆先生閱讀 556評論 2 4