假設ViewController A 和 B 都被添加到navigationcontroller 棧中,順序是A->B,A 頁面隱藏導航條,B 頁面顯示導航條。
最簡單實現是在 A 的 viewWillAppear 中隱藏navBar,在viewWillDisappear 中顯示navBar,代碼如下
- (void)viewWillAppear:(BOOL)animated
{
[superviewWillAppear:animated];
{
[superviewWillAppear:animated];
[self.navigationControllersetNavigationBarHidden:YESanimated:NO];
}
- (void)viewWillDisappear:(BOOL)animated
{
[superviewWillDisappear:animated];
- (void)viewWillDisappear:(BOOL)animated
{
[superviewWillDisappear:animated];
[self.navigationControllersetNavigationBarHidden:NOanimated:NO];
}
運行會出現pop回來navBar位置黑塊問題,像下面這樣,這個問題是隱藏navBar 時animation為NO導致的。

那么我們將animation 設置為YES,運行會發現在切換tab時又會出現抖動問題。

最終的解決方法是將animation 設置為當前調用的動畫狀態,就能解決上面兩個問題
- (void)viewWillAppear:(BOOL)animated
{
[superviewWillAppear:animated];
{
[superviewWillAppear:animated];
[self.navigationControllersetNavigationBarHidden:YESanimated:animated];
}
- (void)viewWillDisappear:(BOOL)animated
{
[superviewWillDisappear:animated];
- (void)viewWillDisappear:(BOOL)animated
{
[superviewWillDisappear:animated];
[self.navigationControllersetNavigationBarHidden:NOanimated:animated];
}