导航栏不显示

时间:2013-10-15 10:33:10

标签: ios objective-c xcode5

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

StartViewController

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

以下是 IBAction 中手动segue的代码:

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

DestinationViewController

我试过这样的

- (void)viewDidLoad
{
    [super viewDidLoad];
// Do any additional setup after loading the view.
    [[self navigationController] setNavigationBarHidden:NO animated:NO];
}

但它不起作用,实际上在调试器中我注意到navigationcontroller等于 nil ,我只是想不通原因。

4 个答案:

答案 0 :(得分:11)

如果您希望StartViewController隐藏导航栏,并使用DestinationViewController来显示它: 将相应的代码添加到-(void)viewWillAppear:方法。

StartViewController:

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

DestinationViewController:

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

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

的所有行

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

另一个角度:在故事板编辑器中,我意外地重置了初始视图控制器(在属性窗格中),结果我丢失了导航栏。只需将导航控制器重置为"是初始视图控制器"把它带回来了。

答案 3 :(得分:0)

如果您的代码看起来像

DateTimeFormatter

将其更改为,

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

type" super viewWillappear ..."之前" self.nav ..."