[英]Navigation bar doesn't show up
我有这个问题:我有一个视图控制器 (嵌入在导航控制器中),在执行操作后触发手动segue推新视图控制器 ,但是在新视图控制器中没有导航栏,因为在第一个控制器中我有实现了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 ,我只是想不通原因。
如果你想让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:
所有行setNavigationBarHidden:
这里的问题是你的viewDidLoad
在你的viewWillDisappear
之前被调用。 您必须先加载新视图,然后才能卸载父视图(可视)。 因此,您可以将导航栏设置为可见并再次隐藏它。
导航栏在嵌套在其中的视图之间是通用的。 除非子视图视图不需要,否则在视图消失时确实没有理由隐藏它。 如果您进一步解释了您尝试做的事情,我们可以提供更多帮助。 但同时如果你只是删除你的viewWillDisappear
实现(至少你向我们展示的那样)你应该是好的。 否则,您可以在DestinationViewController的viewWillAppear
或viewDidAppear
设置hidden属性为no
(取决于调用顺序)。
另一个角度:在故事板编辑器中,我意外地重置了初始视图控制器(在属性窗格中),结果我丢失了导航栏。 只需将导航控制器重置为“是初始视图控制器”即可将其恢复。
如果您的代码看起来像
-(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 ...”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.