视图中没有导航栏

     2023-03-22     56

关键词:

【中文标题】视图中没有导航栏【英文标题】:No navigation bar in view 【发布时间】:2013-12-28 02:08:02 【问题描述】:

我的 iOS 应用中有以下结构:

    RootViewController(显示核心数据的表视图控制器)。

    在 RootViewController 上是一个包含 4 个按钮的视图。 按钮 1:菜单... 按下按钮 1 后,NSManagedObjectContext 被传递给 MenuViewController。 在 MenuViewController 上有几个按钮,其中一个用于打开 DoneViewController,它与 RootViewController 重复(仅NSPredicates 更改为显示不同的核心数据对象。

DoneViewController 正确显示了预期的行,但它应该有一个导航栏,但没有显示。

这是用于打开DoneViewController的代码:

- (IBAction)doneToDoaction:(id)sender 
    DoneViewController *viewController = [[DoneViewController alloc] init];
    viewController.managedObjectContext = [self mainContext];
    [self presentViewController:viewController animated:YES completion:nil];

我应该怎么做才能打开视图并拥有像 RootViewController 这样的导航栏?


我现在将所有导航控制器实例放入我的应用程序中:

//AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

  // Fetch the data to see if we ought to pre-populate
  NSError *error = nil;
  if (![[self fetchedResultsController] performFetch:&error]) 
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
  

  [self loadFavoriteThingsData];


  RootViewController *rootViewController = (RootViewController *)

    [navigationController topViewController];
  [rootViewController setManagedObjectContext:[self managedObjectContext]];


  [window addSubview:[navigationController view]];
  [window makeKeyAndVisible];
  return YES;


//RootViewController
- (IBAction)MenuToDoAction:(id)sender 

    MenuViewController *viewController = [[MenuViewController alloc] init];

    viewController.mainContext = [self managedObjectContext];
    [self presentViewController:viewController animated:YES completion:nil];



//MenuViewController
- (IBAction)doneToDoaction:(id)sender 
    DoneViewController *viewController = [[DoneViewController alloc] init];
    viewController.managedObjectContext = [self mainContext];
    [self.navigationController pushViewController:viewController animated:YES];

@EricLee 提出的最后一个 doneToDoaction 方法不会抛出异常,但是按钮动作没有执行,应用程序冻结...

【问题讨论】:

你有与该视图链接的导航控制器吗? 不,我没有。谢谢... 【参考方案1】:

您想要推送它到当前导航控制器上,而不是呈现 DoneViewController。

导航控制器 (self.navigationController) 拥有包含导航栏的视图。将视图控制器推到它上面将导致该视图控制器的视图与导航栏一起出现在导航控制器的视图中。

【讨论】:

谢谢matt,请你详细回答一下,我试过用pushViewController改presentViewController,显示异常...【参考方案2】:

当前视图控制器时添加导航控制器

- (IBAction)doneToDoaction:(id)sender 
    DoneViewController *viewController = [[DoneViewController alloc] init];
    viewController.managedObjectContext = [self mainContext];
UINavigationController * nVC=[[UINavigationController alloc] initWithRootViewController:viewController];
    [self presentViewController:nVC animated:YES completion:nil];

【讨论】:

这就是答案,非常感谢...但是为什么是'initWithRootViewController'? 需要在父视图控制器中推送其他视图控制器 感谢您的时间和耐心。祝你有美好的一天。【参考方案3】:

如果你使用 storyboard 或 xib 并且不想将 DoneViewController 推送到 UINavigationViewController,我建议你在 storyboard 或 xib 中手动为状态栏做一个间隙。

在 iOS7 中,状态栏是透明的。因此,您的 VC 的顶部在其下方扩展。 如果你把它推到 UINavigationViewController 并且导航栏是不透明的,那就没什么可做的了。但是,如果您不这样做,请手动设置一个间隙。

编辑 抱歉,我找到了比我之前建议的更好的方法。不需要透明状态栏,在项目配置的General选项卡中将status bar style选项设置为Black Opaque

【讨论】:

@mvasco 请查看我在帖子中的附加评论。【参考方案4】:

您可以将待展示的 viewController 推送到当前(展示的)viewcontroller 的 navigationController 中。

- (IBAction)doneToDoaction:(id)sender 
    DoneViewController *viewController = [[DoneViewController alloc] init];
    viewController.managedObjectContext = [self mainContext];
    [self.navigationController pushViewController:viewController animated:YES];

【讨论】:

谢谢,但使用您的提案更新应用不会引发异常,但 DoneViewController 未显示......【参考方案5】:

在您的 AppDelegate 中 didFinishLaunchingWithOptions

self.window = [[UIWindo walloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.controller = [[ViewController alloc] init];
UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:self.controller];
self.window.rootViewController = nav;
[self.window addSubview:nav.view];
[self.window makeKeyAndVisible];

【讨论】:

没关系。恭喜

如果上一个视图没有标题,如何让导航栏后退按钮总是说回来?

】如果上一个视图没有标题,如何让导航栏后退按钮总是说回来?【英文标题】:HowtomakeNavigationBarbackbuttonalwayssaybackifthepreviousviewhasnotitle?【发布时间】:2020-05-1512:21:19【问题描述】:例如如果您从视图A导航到视图B,视图B通常... 查看详情

模态 Segue 进入没有导航栏的导航控制器

...2012-03-2618:54:23【问题描述】:在我的故事板中,我有一个视图,其中包含一个转入嵌入到导航控制器中的新视图的视图(因此转接指向导航控制器)。我将segue设置为模态转换,但是当新视图启动动画时,它包含视图上方的标准... 查看详情

模态显示的表格视图没有导航栏

】模态显示的表格视图没有导航栏【英文标题】:TableViewpresentedmodallyhasnonavigationbar【发布时间】:2012-10-1921:48:42【问题描述】:当我以模态方式呈现视图控制器时://模态显示导航控制器。[selfpresentModalViewController:theNavControllerAni... 查看详情

在导航控制器中添加子视图覆盖导航栏

】在导航控制器中添加子视图覆盖导航栏【英文标题】:AddingSubviewCoversUpNavigationBarinNavigationController【发布时间】:2014-08-0715:20:54【问题描述】:我有一个导航控制器,有时我需要显示一个子视图来输入密码。问题是,当我这样... 查看详情

如何在导航栏中添加多个栏按钮(代码片段)

最初我创建了一个名为'mainView'的动态视图。在那里,我添加了导航栏。之后,我想在导航栏中添加2个右边的按钮。如果我这样编码,它会显示带导航栏的视图。但它没有显示正确的条形按钮。1.是否可以在没有导航控制器的情... 查看详情

在导航栏下创建动画视图

】在导航栏下创建动画视图【英文标题】:Creatingananimatedviewundernavigationbar【发布时间】:2014-04-0314:40:20【问题描述】:在我的应用程序中,我想添加一些类似于在导航栏下出现和消失的动画视图,类似于FacebookMessenger之一:【问... 查看详情

导航栏在搜索结果表视图中消失

】导航栏在搜索结果表视图中消失【英文标题】:Thenavigationbardisappearsinthesearchresulttableview【发布时间】:2015-05-2307:15:02【问题描述】:我试图在导航栏中有一个UISearchController并在外部控制器中显示结果。由于某种原因,我在输... 查看详情

将导航栏剪辑到滚动视图

】将导航栏剪辑到滚动视图【英文标题】:Clipnavigationbartoascrollview【发布时间】:2011-02-1220:42:44【问题描述】:在Safari中导航栏随Web视图滚动的行为相同。我试过有两个滚动视图。第一个滚动视图是导航栏的容器,第二个滚动视... 查看详情

导航栏和视图之间的分隔符 - iOS 7

】导航栏和视图之间的分隔符-iOS7【英文标题】:Separatorbetweennavigationbarandview-iOS7【发布时间】:2013-09-2016:01:06【问题描述】:在iOS7中,导航栏和视图之间有一个灰色分隔符。在iOS6中,没有那条水平线,因此视图会与导航栏融为... 查看详情

推送视图控制器中的半透明导航栏覆盖?

】推送视图控制器中的半透明导航栏覆盖?【英文标题】:Translucentnavigationbaroverridesinpushedviewcontroller?【发布时间】:2017-04-0113:25:54【问题描述】:我有一个内容模糊的半透明导航栏。我想推送一个带有另一个半透明导航栏但没... 查看详情

Xcode 导航栏、标签栏、表格视图标题未显示

】Xcode导航栏、标签栏、表格视图标题未显示【英文标题】:Xcodenavigationbar,tabbar,tableviewtitlenotshowing【发布时间】:2015-02-1921:53:19【问题描述】:我有导航栏标题没有显示的问题,并且表格的第一行没有显示,这是我嵌入标签栏... 查看详情

显示导航栏 Segue

...正在尝试从Swift的导航控制器中显示导航栏。我通过模态视图的转场链接到视图。由于某种原因,导航未显示在视图中。我如何实现这一目标?侧边栏视图控制器从根视图控制器以模态方式呈现。我在下面发布了我的故事板的屏... 查看详情

Swift:强制在模态中显示导航栏

...Swift项目中有以下StoryboardSegue:动画是正确的,但是目标视图控制器中没有导航栏。我想强制目标视图控制器有一个导航栏。我在目标视图控制器中尝试过:overridefuncviewWillAppear(animated:Bool)sup 查看详情

从主页添加导航

...【发布时间】:2010-08-0219:50:50【问题描述】:我正在从主视图向我的应用中的子视图添加导航。我了解在导航堆栈中推送和弹出视图的概念,但是,我不希望主屏幕中的导航栏。基本上,当用户离开主视图到任何子视图时,我希... 查看详情

更改导航栏背景图像导致视图向上移动

】更改导航栏背景图像导致视图向上移动【英文标题】:ChangingUINavigationBarBackgroundImagecausingtheViewstomoveup【发布时间】:2015-03-3115:32:45【问题描述】:我正在处理现有代码,但更改UINavigationBar的背景图像会导致导航栏下方的视图... 查看详情

导航栏不显示

...:2013-10-1510:33:09【问题描述】:我有这个问题:我有一个视图控制器(嵌入在导航控制器中),但是在执行操作后会触发手动segue推送新视图控制器在新的视图控制器中没有导航栏,因为在第一个控制器中我已经实现了viewWillDisap... 查看详情

导航栏上没有后退按钮

...题描述】:我从一个基于导航的项目开始,并将进一步的视图推送到控制器上。问题是,如果我不给导航项命名,那么后退按钮就不会被绘制!只有我给导航栏一个标题,后退按钮才会出现。在NO标题的情况下,苹果似乎不能写... 查看详情

图像视图在滚动视图中隐藏导航栏

】图像视图在滚动视图中隐藏导航栏【英文标题】:Imageviewhidenavigationbarinscrollview【发布时间】:2013-02-0620:45:59【问题描述】:在我的ipad应用中,滚动视图中有一个导航栏和一个图像视图。当我运行我的应用程序时,图像视图会... 查看详情