我遇到了这个问题:我有一个视图控制器(嵌入在导航控制器中),在执行操作后会触发手动推送新视图控制器,但是在新的视图控制器中没有导航栏,因为在第一个控制器中我实现了viewWillDisappear方法,如下所示:
- (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];
我试过这样的
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
[[self navigationController] setNavigationBarHidden:NO animated:NO];
}
但它不起作用,实际上在调试器中我注意到navigationcontroller等于 nil ,我只是想不通原因。
答案 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的no
或viewWillAppear
中将隐藏属性设置为viewDidAppear
(取决于调用顺序)。
答案 2 :(得分:0)
另一个角度:在故事板编辑器中,我意外地重置了初始视图控制器(在属性窗格中),结果我丢失了导航栏。只需将导航控制器重置为"是初始视图控制器"把它带回来了。
答案 3 :(得分:0)
如果您的代码看起来像
DateTimeFormatter
将其更改为,
-(void)viewWillAppear:(BOOL)animated
{
[self.navigationController setNavigationBarHidden:NO];
[super viewWillAppear:YES];
}
type" super viewWillappear ..."之前" self.nav ..."