隐藏导航栏,取决于视图控制器的显示方式
Posted
技术标签:
【中文标题】隐藏导航栏,取决于视图控制器的显示方式【英文标题】:Set navigation bar hidden, depending on how the view controller appeared 【发布时间】:2011-08-18 12:35:13 【问题描述】:我在其中一个选项卡中有一个带有导航控制器的选项卡栏。目前,导航控制器的根视图没有显示导航栏,并且通过
很好地动画到子视图中- (void)viewDidLoad
...
[self.navigationController setNavigationBarHidden:YES animated:NO];
...
和
- (void)viewWillAppear:(BOOL)animated
[self.navigationController setNavigationBarHidden:YES animated:YES];
- (void)viewWillDisappear:(BOOL)animated
[self.navigationController setNavigationBarHidden:NO animated:YES];
当然,更改选项卡会启动 viewWillAppear
功能,因此当我返回根视图时,导航栏会滑开,而不是不存在。
有没有一种方法可以隐藏根视图上的导航栏而不对其进行动画处理,除非从导航堆栈上的子视图中出现?
【问题讨论】:
【参考方案1】:viewWillAppear:animated
上的 (BOOL)animated
参数。更改选项卡时,它将以NO
出现,因为动画是即时的。另一方面,如果它被animated:YES
从导航堆栈推送或弹出,那么它将以YES
出现。
虽然这看起来像一个 hack,但它是正确的方法:你不需要弄清楚谁是调用者,相反,专注于这样一个事实:如果你的视图控制器会显示动画,你有时间做你自己的动画,如果没有,就把它搞砸,立即显示(或者在这种情况下,隐藏)一切。
【讨论】:
这似乎有点容易破解。如果选项卡切换行为发生变化怎么办?怎么样 - (void)viewWillAppear:(BOOL)animated [self.navigationController setNavigationBarHidden:(self.navigationController.viewControllers.count>1) animated:YES]; @MihaiTimar 感谢您的评论。是的,这是一种确定谁是呼叫者的方法,我鼓励您用它来创建对原始问题的新回复。我的回答更侧重于animated:(BOOL)
作为“我有时间做自己的动画吗?”更有用的事实。而不是试图弄清楚视图是如何出现的。我更新了我的答案以确保它清楚。【参考方案2】:
尝试在 UINavigationController 的委托的 navigationController:willShowViewController:animated: 方法中显示/隐藏栏,具体取决于显示的视图控制器是否是您的根视图控制器。
【讨论】:
【参考方案3】:如果您在应用程序委托中设置一个布尔变量,并在子视图中将该布尔变量设置为 0,而在其他视图中设置为 1,会怎样。并且在您的视图中将出现,根据您的变量的值,您可以设置动画。
【讨论】:
原来动画布尔变量已经解决了这个问题。不过谢谢。以上是关于隐藏导航栏,取决于视图控制器的显示方式的主要内容,如果未能解决你的问题,请参考以下文章