没有 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