如何在没有导航栏的 View Controller 内使用 Nav 推送 UIViewController

Posted

技术标签:

【中文标题】如何在没有导航栏的 View Controller 内使用 Nav 推送 UIViewController【英文标题】:How to push UIViewController with Nav while inside View Controller without nav bar 【发布时间】:2011-12-27 09:28:45 【问题描述】:

我正在模态显示 UINavigationController。 对于根视图控制器,我不想显示导航栏。

但是对于更深层次的控制器,我确实想展示它。

我想在我的根视图控制器中做这样的事情:

-(void) viewWillAppear:(BOOL)animated

    [self.navigationController.navigationBar setHidden:YES];


-(void) viewWillDisappear:(BOOL)animated

    [self.navigationController.navigationBar setHidden:NO];

但是,当我从第一个视图控制器返回到根视图控制器时,这会出现问题。 导航栏在按下“后退”按钮后消失(在第一个视图控制器内,留下空白区域),而不仅仅是在 rootViewController 完成加载之后。 (显然是因为我的代码使用了 viewWillAppear)

有解决办法吗?

我唯一想到的就是永久隐藏导航栏,并手动将导航栏添加到堆栈中的每个视图控制器。 我希望不要这样做,因为它需要做更多的工作,而且,我想使用箭头形状的按钮,为此我必须创建自定义图像。

感谢任何建议。

【问题讨论】:

可以发个截图吗?你的第二个视图控制器是全屏的吗?我没有 100% 得到你的问题。 【参考方案1】:

这应该可以,我没有测试过,但理论上应该可以:

- (void)viewWillAppear:(BOOL)animated

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


- (void)viewWillDisappear:(BOOL)animated

    [super viewWillDisappear:animated];
    [self.navigationController setNavigationBarHidden:NO animated:YES];

【讨论】:

以上是关于如何在没有导航栏的 View Controller 内使用 Nav 推送 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章

是否有隐藏导航栏的xml方式?

presentViewController显示方式的窗口,没有导航栏的解决方法

如何在 Xcode Interface Builder 中将导航项添加到 Table View Controller(带有静态单元格)?

swift找window,导航栏的简单使用,Controller通过闭包传值简单示例

以编程方式获取导航栏的高度

Xcode Segue View Controller 从右到左没有 UINavigation