前言:開發(fā)中經(jīng)常碰到只有在首頁或者某一個頁面隱藏navigationController,其他頁面全部正常.
1.如果是這樣書寫,會出現(xiàn)點擊tabbar切換的時候,在回到需要隱藏navigationController的頁面時會出現(xiàn)nav跳動問題
- (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];
}
正確解決方式如下:
- (void)viewWillAppear:(BOOL)animated {
[self.navigationController setNavigationBarHidden:YES animated:NO];
[super viewWillAppear:animated];
}
- (void)viewWillDisappear:(BOOL)animated {
[self.navigationController setNavigationBarHidden:NO animated:NO];
[super viewWillDisappear:animated];
}
這樣也并不完美:來看第二種異常
2.假如是在首頁隱藏nav,那么我們push到B頁在返回時在nav位置則會出現(xiàn)明顯的白色條狀,如果是使用手勢pop則更為明顯;
綜上正確解決方案如下:
- (void)viewWillAppear:(BOOL)animated {
[self.navigationController setNavigationBarHidden:YES animated:animated];
[super viewWillAppear:animated];
}
- (void)viewWillDisappear:(BOOL)animated {
[self.navigationController setNavigationBarHidden:NO animated:animated];
[super viewWillDisappear:animated];
}
解釋為什么要使用animated,我們點進API可以看到官方的注釋
Hide or show the navigation bar. If animated, it will transition vertically using UINavigationControllerHideShowBarDuration.
大致意思是說隱藏和顯示導航欄,如果是使用動畫效果,他將使用UINavigationControllerHideShowBarDuration垂直過渡.