导航栏不显示

Posted

技术标签:

【中文标题】导航栏不显示【英文标题】:Navigation bar doesn't show up 【发布时间】:2013-10-15 10:33:09 【问题描述】:

我有这个问题:我有一个 视图控制器(嵌入在导航控制器中),但是在执行操作后会触发 手动 segue 推送新视图控制器在新的视图控制器中没有导航栏,因为在第一个控制器中我已经实现了 viewWillDisappear 方法,如下所示:

StartViewController

- (void)viewWillDisappear:(BOOL)animated 
  // Hide the navigation bar just before the view disappear
  [[self navigationController] setNavigationBarHidden:YES animated:YES];

这是 IBAction 中的手动转场代码:

[self performSegueWithIdentifier:@"tutorialSegue" sender:self];

目标视图控制器

我试过这样

- (void)viewDidLoad

    [super viewDidLoad];
// Do any additional setup after loading the view.
    [[self navigationController] setNavigationBarHidden:NO animated:NO];

但它不起作用,实际上在调试器中我注意到 navigationcontroller 等于 nil 我就是不知道为什么。

【问题讨论】:

删除[[self navigationController] setNavigationBarHidden:YES animated:YES];[[self navigationController] setNavigationBarHidden:NO animated:NO]; 【参考方案1】:

如果你想让 StartViewController 隐藏导航栏,并让 DestinationViewController 显示它: 在-(void)viewWillAppear:方法中添加对应代码。

StartViewController:

-(void)viewWillAppear:(BOOL)animated 
    [super viewWillAppear:animated];
    [[self navigationController] setNavigationBarHidden:YES animated:YES];

目标视图控制器:

-(void)viewWillAppear:(BOOL)animated 
    [super viewWillAppear:animated];
    [[self navigationController] setNavigationBarHidden:NO animated:YES];

如果您希望两个视图控制器都有导航栏,只需删除所有包含setNavigationBarHidden: 的行

【讨论】:

这可以通过使用情节提要而不是通过编程来完成吗? 请注意,这是旧答案,因为 ios7 建议使用(覆盖)prefersStatusbarHidden。【参考方案2】:

你的问题是你的viewDidLoad 在你的viewWillDisappear 之前被调用。您必须先加载新视图,然后才能卸载父视图(视觉上)。因此,您将导航栏设置为可见并再次隐藏它。

导航栏在嵌套在其中的视图之间是通用的。当视图消失时,真的没有理由隐藏它,除非子视图视图不需要它。如果您进一步解释了您正在尝试做的事情,我们可以提供更多帮助。但与此同时,如果您只是删除您的 viewWillDisappear 实现(至少您向我们展示的内容),您应该会很好。否则,您可以在 DestinationViewController 的 viewWillAppearviewDidAppear 中将 hidden 属性设置为 no(取决于调用顺序)。

【讨论】:

你说得对,实际上我在没有导航栏的 startViewController 之前还有另一个视图控制器。如果我没有在 startViewController 中使用viewWillDisappear 解决方案,当我切换回来时,它的导航栏仍然在屏幕上。对不起我的英语 然后在那个视图控制器(startViewController 之前的那个)中将导航栏隐藏在它的viewWillAppear 中(所以每个控制器都说明它是否需要导航栏)。这样,每当您返回它时,它就被隐藏了!而且你的英语真的很棒,我永远不会猜到这不是你的第一语言!【参考方案3】:

这只是另一个角度:在故事板编辑器中,我意外重置了初始视图控制器(在属性窗格中),结果我丢失了导航栏。只需将导航控制器重置为“是初始视图控制器”即可将其恢复。

【讨论】:

【参考方案4】:

如果你的代码是这样的

-(void)viewWillAppear:(BOOL)animated

   [self.navigationController setNavigationBarHidden:NO];
   [super viewWillAppear:YES];

改成,

-(void)viewWillAppear:(BOOL)animated

   [super viewWillAppear:YES];
   [self.navigationController setNavigationBarHidden:NO];

在“self.nav...”之前输入“super viewWillappear...”

【讨论】:

以上是关于导航栏不显示的主要内容,如果未能解决你的问题,请参考以下文章

Bootstrap 4动画导航栏不显示

iOS - 方向更改时导航栏不显示大标题

自定义标签栏不显示导航栏

react-native 页面使用WebView布满整个页面,导航栏不显示问题

react-native 页面使用WebView布满整个页面,导航栏不显示问题

iOS:当从主视图控制器嵌入时,导航栏不显示