3

當您進入由搜索顯示控制器處理的搜索欄時,它將向上滑動視圖並將導航欄向上推。這很容易做到,但是,當您單擊搜索結果並在導航控制器的堆棧上按下新視圖時,導航欄會從右側滑入視圖!搜索顯示控制器如何隱藏導航欄?

這是如何完成的?如果您只需將導航欄設置爲隱藏或顯示,就會立即發生。我無法弄清楚它是如何隱藏在一個視圖控制器中的!

非常感謝,

邁克爾

回答

8

您可以動畫導航欄的過渡。有關更多詳細信息,請參閱-setNavigationBarHidden:animated:

如果你需要做到這一點每個視圖控制器的基礎上,只覆蓋視圖控制器的-viewDidAppear:-viewWillDisappear:方法,例如:

- (void) viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    [self.navigationController setNavigationBarHidden:YES animated:YES]; 
} 

- (void) viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 
    [self.navigationController setNavigationBarHidden:NO animated:YES]; 
} 

以上將隱藏導航欄時,該視圖控制器推在導航堆棧頂部,並在視圖控制器彈出時顯示導航欄。

您可以隨時撥打-setNavigationBarHidden:animated:,但這兩種方法對於應用大量UI更改很有用。

+0

是的但那會隱藏導航欄,當你推動另一個視圖控制器時,它仍然是隱藏的。即使您在推新控制器時顯示導航欄,您也會看到導航欄顯示在前一個控制器上。這是因爲導航欄對於導航控制器堆棧上的所有控制器都是相同的欄。因此,對於搜索顯示控制器如何執行它的操作感到困惑! – 2009-11-20 01:14:01

+0

查看編輯答案。您可以在推送/彈出視圖控制器時爲導航欄設置動畫。 – 2009-11-20 01:55:25

+0

啊啊不行!天才!我不知道在viewWillAppear/Disappear中放置顯示/隱藏代碼會對導航欄的顯示方式產生任何影響!非常感謝,我在這個問題上被困了好幾個小時! – 2009-11-20 02:10:24

0
-(void)viewDidLayoutSubviews{ 
    [self.navigationController setNavigationBarHidden:NO animated:NO]; 
} 

它不會隱藏導航欄。

相關問題