我有一个标签栏,其中一个标签中有导航控制器。目前导航控制器的根视图没有显示导航栏并通过
很好地动画到子视图中- (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
功能,因此当我返回到根视图时,导航栏会滑开,而不是仅仅在那里。
除了从导航堆栈上的子视图中显示时,我是否可以隐藏根视图上的导航栏而不设置动画?
答案 0 :(得分:14)
(BOOL)animated
上的viewWillAppear:animated
参数。更改标签时,它将显示为NO
,因为动画是即时的。另一方面,如果使用animated:YES
从导航堆栈中推送或弹出,则它将显示为YES
。
虽然这看起来像黑客,但这是正确的方法:你不需要弄清楚谁是调用者,而是专注于如果你的视图控制器将显示动画,你有时间做你自己的动画,如果没有,拧紧它,立即显示(或在这种情况下,隐藏)所有内容。
答案 1 :(得分:3)
尝试在UINavigationController的委托的navigationController:willShowViewController:animated:方法中显示/隐藏该栏,具体取决于所显示的视图控制器是否是您的根视图控制器。
答案 2 :(得分:0)
如果在应用程序委托中设置布尔变量,并在set中将布尔值相应地在子视图中设置为0,在其他视图中设置为1,该怎么办?在viewwillappear中,根据变量的值,可以设置动画。