簡體   English   中英

如何在iPhone中隱藏導航欄?

[英]How to hide navigation bar in iPhone?

目前我在iPhone應用程序工作,我有兩個屏幕,如A和B,A沒有導航欄,但B有導航欄。 所以我這樣設置。

A類:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.title=@"A";
    [self.navigationController setNavigationBarHidden:YES];
}

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

B級:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.title=@"B";
    [self.navigationController setNavigationBarHidden:NO];
}

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

然后我運行應用程序,當我去B類到A的前一課時,藍色顯示在B類以下附加屏幕截圖供您參考。 如何解決這個問題? 請幫我

提前致謝

在此輸入圖像描述

在B類中設置它

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

您需要使用以下代碼:

[navigationController setNavigationBarHidden: YES animated:YES]

in - (void)viewWillAppear:(BOOL)動畫或稍后在兩個類的視圖生命周期中。 [避免在- (void)viewDidLoad中執行此操作。]

這里的技巧是使用setNavigationBarHidden: animated方法(代替更簡單的setNavigationBarHidden:方法)。 這將確保您的UI問題消失,以及由此引起的任何位置問題。

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

嘗試在B類的 viewWillDisAppear中設置navigationBarHidden: .

B班

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

當你正在推動控制器時,我不認為當你隱藏和動態顯示導航欄時的行為。

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

使用下面的行來隱藏viewWillAppear: navigationBar viewWillAppear:方法 -

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

您的代碼可以HideUnhide navigationBar 問題是你在viewWillAppear:隱藏了Class AnavigationBar viewWillAppear:在出現視圖之前調用它,所以在加載Class A視圖之前,每次都會隱藏navigationBar
如果我們談論你的藍色,我認為這是你的window顏色。 因為在隱藏了navigationBar之后,你的self.view上方會有一個空格,高度為44.0 所以有三種方法可以修復它。

  • Class AviewDidAppear:方法中隱藏Class AnavigationBar
  • 設置要顯示的window顏色。
  • 您可以添加到圖像window的背景中,在圖像上做出navigationBar相同的Class BnavigationBar ,所以當原來navigationBar會被隱藏起來會看到。

我最近必須解決這個問題,我發現有必要調用setNavigationBarHidden:NOpushViewController:之后立即setNavigationBarHidden:NO pushViewController:並且在popViewController:之后立即執行setNavigationBarHidden:YES ,並在每個調用中使用動畫YES。

所以,推動時:

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

彈出時:

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

但在我的情況下,雖然我可以按上述方式進行推送,但我不想改變我的B類 ,而是希望它不知道以前沒有隱藏導航欄(因為它不是我的代碼)。 此外,該視圖使用普通的Back按鈕彈出,沒有顯式調用popViewControllerAnimated: . 在我的代碼中最有效的方法是讓我的類A成為UINavigationController委托,並在彈出窗口時隱藏委托方法調用上的工具欄。

不幸的是,我發現UINavigationControllerDelegate方法沒有太大的幫助,當推送我的B類視圖或從它推動的另一個視圖didShowViewController回到它時, willShowViewControllerdidShowViewController被無法區分地調用。

我按照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:按下后退按鈕后調用,但這對我setNavigationBarHidden:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM