在iOS開發(fā)中,特別是一些首頁展示上要去掉導航欄(UINavigationBar)。
最簡單的辦法在- (void)viewWillAppear:(BOOL)animated方法中直接設置隱藏導航欄,在(void)viewWillDisappear:(BOOL)animated方法中在顯示出導航欄
- (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];
}
但是這樣會出現(xiàn)一個問題,就是切換到這個界面的時候,會出現(xiàn)整個界面上移的效果,體驗不是很好。如圖所示的效果

這時候你可能想到是:你設置隱藏導航欄的時候animate動畫設置為NO就不會上移了。 這樣確實是不會有界面整體上移的假象,但是會出現(xiàn)另外一個問題,當你直接返回的時候都沒有問題,一旦你用側滑返回的時候,界面最上面導航欄那里就出現(xiàn)了異常,如圖所示

這到底應該怎么做呢???
我的解決辦法是:
在要隱藏導航欄的界面的viewWillAppear方法中隱藏導航欄
,當你跳轉進入到下一個的時候,要顯示導航欄,在這個界面的viewWillAppear方法中設置導航欄出現(xiàn)。
方法和上面的一致,
//當前要隱藏導航欄的VC
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
//要顯示導航欄的VC
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
這樣就會避免了上面的兩個問題。但是這樣子做比較麻煩,就是你在當前隱藏導航欄的VC所有可跳轉到的VC,都要設置一下顯示導航欄。
朋友們有別的解決方案,跪求告知,O(∩_∩)O謝謝
2017.10.9補充一個問題點:
在開發(fā)中可能會遇到在不同的界面改變導航欄顏色的需求,在不同的VC中重寫了這個方法設置導航欄顏色,- (UIStatusBarStyle)preferredStatusBarStyle,就可能會出現(xiàn)異常。
解決方案:
其實解決的辦法很簡單,就是在導航控制器中重寫childViewControllerForStatusBarStyle方法,如下:
- (UIViewController *)childViewControllerForStatusBarStyle{
return self.visibleViewController;
}
這句代碼的作用是,不調(diào)用自己本身的preferredStatusBarStyle方法而是調(diào)用顯示的控制器的preferredStatusBarStyle方法。