导航栏不显示
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 的 viewWillAppear
或 viewDidAppear
中将 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...”
【讨论】:
以上是关于导航栏不显示的主要内容,如果未能解决你的问题,请参考以下文章
react-native 页面使用WebView布满整个页面,导航栏不显示问题