03_iOS導航欄的正確隱藏方式
阿新 • • 發佈:2020-12-12
簡介
在專案中經常碰到首頁頂部是無限輪播,需要靠最上面顯示.有的設定導航欄為透明等一系列的方法,這個可以藉助第三方.或者乾脆簡單粗暴的直接隱藏掉導航欄.可是push到下一個頁面的時候是需要導航欄的,如何做了,這裡給出兩種方法.
第一種做法
注意這裡一定要用動畫的方式隱藏導航欄,這樣在使用滑動返回手勢的時候效果最好,和上面動圖一致.這樣做有一個缺點就是在切換tabBar的時候有一個導航欄向上消失的動畫.
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.navigationController setNavigationBarHidden:YES animated:animated]; }- (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [self.navigationController setNavigationBarHidden:NO animated:animated]; }
第二種做法
設定self為導航控制器的代理,實現代理方法,在將要顯示控制器中設定導航欄隱藏和顯示,使用這種方式不僅完美切合滑動返回手勢,同時也解決了切換tabBar的時候,導航欄動態隱藏的問題。最後要記得在控制器銷燬的時候把導航欄的代理設定為nil。
@interface WLHomePageController () <UINavigationControllerDelegate> @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]; } - (void)dealloc { self.navigationController.delegate = nil; }