为啥我的 UINavigationbar 被隐藏了?
Posted
技术标签:
【中文标题】为啥我的 UINavigationbar 被隐藏了?【英文标题】: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 中?
【参考方案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";
【讨论】:
以上是关于为啥我的 UINavigationbar 被隐藏了?的主要内容,如果未能解决你的问题,请参考以下文章
UINavigationBar 在中断从左边缘手势向右滑动后显示返回按钮,如何隐藏它以及为啥显示它?
UINavigationBar 的高度错误,因为加载时状态栏被隐藏
Swift 中的 UITableView 无法识别 UINavigationBar,填充已关闭,部分 tableview 被隐藏
在 UINavigationBar 中隐藏或禁用 UIBarButtonItem