【问题标题】:why my UINavigationbar is hidden?为什么我的 UINavigationbar 被隐藏了?
【发布时间】:2014-09-24 07:54:01
【问题描述】:

我正在开发一个 ios 应用程序。 我的问题是在我的故事板上我有一个显示的导航栏,但是当我运行应用程序时,它是隐藏的,我不知道为什么....

首先我有一个“StartViewController”来加载数据并显示 MainViewController,我这样做:

 - (void)finishDownloadDataWithError:(NSError *)error{
//si il ya pas eu d'erreur on arrête la video et on éxecute loadMainView.
if (error == nil) {
    NSLog(@"download OK");

    //simule un téléchargeemnt de 3s
    //[NSThread sleepForTimeInterval:2.f];
    _loadingIndicator.hidden = YES;


}
//si il ya eu des erreur on affiche la popup d'erreur.
else {
    NSLog(@"download fail");


}
//on utilise ce booléen pour être sur de ne créer qu'une seul fois les instances des controllers
static BOOL firstTime = YES;
if (firstTime) {
    firstTime = NO;

    //chargement de la vue suivante
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
    MainViewController * controller = (MainViewController *)[storyboard instantiateViewControllerWithIdentifier:@"MainViewController"];
    [self presentViewController:controller animated:YES completion:nil];

  }

}

这是我的 MainViewController

  - (void)viewWillAppear:(BOOL)animated{


self.navigationBar.title = @"FoodStash";
self.navigationController.navigationBar.barTintColor = [UIColor redColor];
self.navigationController.navigationBar.translucent = NO;
self.navigationController.navigationBar.tintColor = [UIColor blueColor];
[self.navigationController setNavigationBarHidden:NO animated:NO];

}

这是我的故事板:

这是没有我的导航栏的模拟器!!!! 你能帮帮我吗?

更新 我试试这个,但我的 mainviewController 现在没有出现。

 //chargement de la vue suivante
   UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
   UINavigationController *naviCon = [storyboard instantiateViewControllerWithIdentifier:@"NavigationController"];
  [self presentViewController:naviCon animated:YES completion:nil];

【问题讨论】:

  • 检查self.navigationController是否为nil。
  • 他是零……初始化它的最佳方法是什么?在哪里?在我的 startviewcontroller 中?

标签: ios xcode uinavigationcontroller ios8 xcode-storyboard


【解决方案1】:

我有你的问题。

请检查导航控制器,因为是初始视图控制器

之后您的ViewController 设置为RootViewController,如下图所示

这是你的结果:


并为 HomeView 控制器“HomeID”设置一个标识符

当你导航时:

 -(void)MOve_screen
 { 
   HomeViewController *home = [self.navigationController.storyboard instantiateViewControllerWithIdentifier:@"HomeID"];
   [self.navigationController pushViewController:home animated:YES];

 }

如果有任何疑问可以随时问我:)

【讨论】:

  • 它几乎可以工作,导航栏显示在startviewcontroller上。但是主视图控制器上没有显示导航栏
  • 你看到我的应用程序在所有视图控制器上完美显示
  • 现在它工作得很好;) 只需要在加载 startview 时隐藏导航栏,并在显示 mainview 之前显示它。
【解决方案2】:

您需要在情节提要中为您的 navigationController 提供情节提要 ID,即“navigationController”,并且您需要添加以下行。

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];   
UINavigationController *naviCon = [storyboard instantiateViewControllerWithIdentifier:@"NAVIGATION_CON_ID"];
// [naviCon addChildViewController:YOUR_VIEW_CON_OBJ];   //no need of this lines as your navigation controller is connected with your VC so it will automatically show your VC. 
[self presentViewController:naviCon animated:YES completion:nil];

所以现在您可以从情节提要和导航栏访问您的 navigationController。

【讨论】:

  • 我做了,但是导航控制器没有加载,应用停留在starviewController上。
  • 你有没有调试检查你是否到达了从star VC跳转到navigationCon的代码行
  • 您是否可以使用您使用过的最新代码更新您的查询。
【解决方案3】:

既然您将MainViewController 显示为:

 [self presentViewController:controller animated:YES completion:nil];

这是一个显示模式的全屏视图,而不是推送转场,也许您应该考虑将您的第一个视图嵌入导航控制器并使用推送转场。

[self.navigationController pushViewController:controller  animated:Yes];

【讨论】:

    【解决方案4】:

    这是我解决问题的方法。

    下载数据后在startviewcontroller中:

        - (void)finishDownloadDataWithError:(NSError *)error{
                 [NSThread sleepForTimeInterval:3.f];
                //si il ya pas eu d'erreur on arrête la video et on éxecute loadMainView.
                if (error == nil) {
                    NSLog(@"download OK");
    
                    //simule un téléchargeemnt de 3s
    
                    _loadingIndicator.hidden = YES;
    
    
                }
                //si il ya eu des erreur on affiche la popup d'erreur.
                else {
                    NSLog(@"download fail");
    
    
                }
                //on utilise ce booléen pour être sur de ne créer qu'une seul fois les instances des controllers
                static BOOL firstTime = YES;
                if (firstTime) {
                    firstTime = NO;
    
    
                     self.navigationController.navigationBar.hidden = NO;
    
                    MainViewController *home = [self.navigationController.storyboard instantiateViewControllerWithIdentifier:@"MainViewController"];
                    [self.navigationController pushViewController:home animated:YES];
    
                }
    
            }
    

    再次在 startviewcontroller 中:

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

    在我的 mainViewController 中:

            - (void)viewWillAppear:(BOOL)animated{
    
               self.navigationItem.hidesBackButton = YES;
                self.title = @"FoodStash";
    
               }
    

    【讨论】:

      猜你喜欢
      • 2015-07-08
      • 1970-01-01
      • 2012-08-06
      • 2013-01-22
      • 1970-01-01
      • 2021-04-02
      • 1970-01-01
      • 2014-09-24
      • 1970-01-01
      相关资源
      最近更新 更多