没有 NavigationBar 的 UINavigationController

Posted

技术标签:

【中文标题】没有 NavigationBar 的 UINavigationController【英文标题】:UINavigationController without NavigationBar 【发布时间】:2011-02-18 19:15:00 【问题描述】:

我有一个“登陆页面/视图”,我不想让导航栏显示,所以我在 viewDidAppear 期间将其关闭

navigationBarHidden = YES;

当我将视图推送到堆栈上然后将其移开时。主登录页面显示导航栏,然后将其隐藏,这会导致我不想要的闪烁。

有没有办法让登陆页面成为 UIView 之类的?当触摸菜单项时,应用程序将在默认登录页面的顶部推送一个新视图。听起来如果没有登录页面是 UINavigationController 就很难做到。有什么想法吗?

【问题讨论】:

【参考方案1】:

尝试在 viewWillAppear 中隐藏导航栏,而不是 viewDidAppear。

【讨论】:

【参考方案2】:

如果您不需要返回着陆页,请为着陆页使用视图控制器,并在应用程序启动时从导航控制器模态显示它。


所以你确实想回到着陆页。

UINavigationController 很难做到这一点。假设您要返回着陆视图。在过渡时,旧视图应该有导航栏,而新视图(登陆页面)不应该有导航栏。 UINavigationController 不允许您手动修改过渡动画。换句话说,你不能用动画隐藏/取消隐藏导航栏以及推/弹出动画(使用viewWillAppear 不能解决问题)。

如果我真的、真的需要这个,我会怎么做?

我会有一个 rootViewController(UIViewController),它的视图是应用程序窗口的唯一子视图。当您的应用程序启动时,rootViewController 添加登录视图作为其视图的子视图。当用户在那里选择一个项目时,您将创建一个UINavigationController,并将相应的视图控制器作为其根视图控制器。

并且,使用kCATransitionPush 类型和kCATransitionFromRight 子类型的CATransition 动画,您可以将导航控制器的视图添加为rootViewController 视图的子视图。

然后,导航控制器的第一个视图需要一个“后退”按钮。在作为导航控制器的第一级视图控制器的所有视图控制器中,创建一个带有文本“返回”的条形按钮项,并将其添加到它们的 navigationItem.leftBarButton 属性中。为按钮设置一个目标-操作(可能是rootViewController)对。

当动作消息触发时,使用CATransition 动画(现在使用kCATransitionFromLeft 子类型)从rootViewController 的视图中移除当前导航控制器的视图。

过渡可能看起来不像原生的UINavigationController那么完美,但我相信这是你能得到的最好的。

【讨论】:

我确实想回到主登录页面,因为它充当主菜单。但我不想显示导航栏,也不想隐藏它,因为它会重新出现,因为它在隐藏时看起来很有趣。 编辑答案以获得更多建议。 我自己测试后,发现这个效果很好。我会考虑打磨它并在很多情况下使用它:)。【参考方案3】:

其实这样做的方法是实现UINavigationController的委托方法navigationController:willShowViewController:animated。此方法是您应该处理隐藏和显示导航栏的地方,以便动画将在 推送/弹出动画期间发生。

【讨论】:

【参考方案4】:

我遇到了一种简单且适合我的方法,这里还没有给出。我假设你有一个主登录页面的视图控制器,它被设置为导航控制器的根视图控制器。然后你应该在主着陆页控制器的 viewWillAppear 和 viewWillDisappear 方法中隐藏/显示导航栏:

- (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];

来源: http://www.iosdevnotes.com/2011/03/uinavigationcontroller-tutorial/

【讨论】:

以上是关于没有 NavigationBar 的 UINavigationController的主要内容,如果未能解决你的问题,请参考以下文章

有没有修改过android 4.22 NavigationBar的黑色背景为半透颜色

当我在 NavigationBar 中单击 UISearchBar 时没有任何反应

iOS 7 NavigationBar 后退按钮自定义图像没有标签

navigationBar 在 ios7 下没有出现,但在 ios 6 中出现

为啥我的 UITapGestureRecognizer 方法没有快速调用 Navigationbar titleView

self.navigationbar的设置总汇