2012-10-23 166 views
1

目前我正在iPhone應用程序工作,我有兩個屏幕像A和B,A沒有導航欄,但B有導航欄。所以我定下了這個。如何在iPhone中隱藏導航欄?

類A:B

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [email protected]"A"; 
    [self.navigationController setNavigationBarHidden:YES]; 
} 

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

類:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [email protected]"B"; 
    [self.navigationController setNavigationBarHidden:NO]; 
} 

-(void)Previousscreen 
{ 
    [self.navigationController popViewControllerAnimated:YES]; 
} 

然後我運行應用程序,當我去到以前的班級像B到A在低於B級的時候藍色展附上屏幕截圖供您參考。如何解決這個問題?請幫我

由於提前

enter image description here

+0

[self.navigationController setNavigationBarHidden:NO];也可以在viewWillAppear中設置此行。 – 2012-10-23 10:12:20

+0

你想要顯示哪種顏色? – TheTiger

回答

1

您需要使用此代碼:

[navigationController setNavigationBarHidden: YES animated:YES]

- (空)viewWillAppear中:(BOOL)動畫或以後在這兩類視圖生命週期。 [避免這樣做 - (無效)viewDidLoad中]

這裏的竅門是在使用setNavigationBarHidden:動畫方法(代替簡單setNavigationBarHidden的:方法)。這將確保您的用戶界面問題消失,並確保由此導致的任何位置問題。

P.S.檢查self.navigationController的值。 navigationBarHidden(而不是self.navigationController。navigationBar.hidden如果需要檢查,如果您的導航欄是隱藏的,在某些時候,在你的代碼。

2

將其設置在B類

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

感謝您的回覆 – SampathKumar

+0

歡迎,它爲您工作。 – 2012-10-23 10:23:29

+0

我會檢查它儘快更新。 – SampathKumar

0

嘗試在B類的viewWillDisAppear

B類設置navigationBarHidden:

-(void)viewWillDisAppear:(BOOL)animated 
{ 
    [self.navigationController setNavigationBarHidden:YES]; 
} 
+0

感謝您的回覆。 – SampathKumar

+0

我試過這個,但同樣的問題再次出現。 – SampathKumar

+0

試試在B班設置上面的代碼,並刪除navigationBar的A類中的其他設置,將其設置爲YES/NO – AppleDelegate

0

我不認爲你是一個隱藏和動態顯示導航欄時,你推動控制器的行爲是支持的。

簡單的解決方案 - 隱藏UINavigationController的動畫欄,如果你想在某些控制器上顯示它,只需添加一個UINavigationBar它。下面一行

+0

示例爲這 – SampathKumar

+0

答案是如此簡單我無法想象一個例子... – Sulthan

0

使用隱藏navigationBarviewWillAppear:方法 -

-(void)viewWillAppear:(BOOL)animated 
{ 
    self.navigationController.navigationBar.hidden=YES; 
} 
+0

我發現我有問題,使用該方法, 如果我使用從左側的交互式滑動從第二個頁面返回一頁第一個屏幕,但提前發佈(沒有完成滑動),當我移動到第三個屏幕時,導航控制器會「卡住」顯示第二個屏幕標題和按鈕欄。 的解決方案是使用setNavigationBarHidden:動畫:,像這樣: '[self.navigationController setNavigationBarHidden:YES動畫:YES];' 這解決了這個問題對我來說。 –

0

你的代碼是正常的HideUnhidenavigationBar。問題在於你隱藏了Class AnavigationBarviewWillAppear:這是剛剛出現視圖之前調用,所以在加載Class A視圖navigationBar每次都被隱藏。
如果我們談論你的藍色,我認爲這是你的window顏色。因爲在隱藏navigationBar之後,您的self.view之上將會有一個空間,其高度爲44.0。所以有三個選項來修復它。

  • 隱藏Class AnavigationBarClass AviewDidAppear:方法。
  • 設置您想要顯示的顏色window
  • 您可以添加一個圖像到window背景,其中在圖像的頂部作出navigationBar相同Class BnavigationBar所以當原始navigationBar將被隱藏它會看到。
+0

感謝您的回覆 – SampathKumar

+0

我想當用戶轉到之前的B班到A,當時藍色圖片顯示的是秒數的小數部分,那麼如何解決這個問題呢? – SampathKumar

+0

你想在當時看到哪種顏色? – TheTiger

0

我最近已經解決了這個,我發現,這是需要調用setNavigationBarHidden:NOpushViewController:setNavigationBarHidden:YES後立即popViewController:後,在每次調用動畫YES。

所以,當推:

[nc pushViewController:classBView animated:YES] 
[nc setNavigationBarHidden:NO animated:YES] 

和彈出時:

[nc popViewControllerAnimated:YES] 
[nc setNavigationBarHidden:YES animated:YES] 

但在我的情況下,而我所能做的如上推,我不想改變我的類B,而是希望它不知道導航欄以前沒有隱藏(因爲它不是我的代碼)。此外,使用普通的「後退」按鈕彈出該視圖,但沒有明確調用popViewControllerAnimated:。在我的代碼中最好的工作是讓我的類A成爲UINavigationController委託,並在發生彈出時將工具欄隱藏在委託方法調用中。

不幸的是我發現UINavigationControllerDelegate方法是不是太有幫助,willShowViewController & didShowViewController推我B類角度還是從另外一個,它已經彈出推回它時,當被稱爲無差別。

我在 https://stackoverflow.com/questions/642312/中關於覆蓋UINavigationController的建議,我做了一些自定義的委託方法,其中一個在[super popViewControllerAnimated:]之後被調用。我的子類可在https://gist.github.com/jpmhouston/6118713和委託方法是:

- (void)navigationController:(UINavigationController *)navigationController isPoppingViewController:(UIViewController *)poppedViewController backTo:(UIViewController *)revealedViewController { 
    if (revealedViewController == self && [poppedViewController isKindOfClass:[MyClassB class]]) { 
     [navigationController setNavigationBarHidden:YES animated:YES]; 
     // ...and more code to run only when going from class B back to class A 
    } 
} 

我敢肯定有更簡單的方法有setNavigationBarHidden:稱爲繼按下後退按鈕,但這個工作對我來說。