我在其中一个选项卡中有一个带有导航控制器的标签栏 . 目前,导航控制器的根视图没有显示导航栏,并且可以很好地动画到子视图中
- (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
功能,因此当我返回到根视图时,导航栏会滑落,而不是仅仅在那里 .
有没有办法可以隐藏根视图上的导航栏而不动画它除了从导航堆栈上的子视图出现时?
3 回答
viewWillAppear:animated
上的(BOOL)animated
参数 . 更改选项卡时,它将显示为NO
,因为动画是立即的 . 另一方面,如果使用animated:YES
从导航堆栈中推送或弹出它,则它将为YES
.虽然这看起来像是一个黑客,但它需要弄清楚谁是调用者,而是专注于 if your view controller will appear animated, you have time to do your own animations ,如果没有,拧紧它,立即显示(或在这种情况下,隐藏)一切 .
尝试在UINavigationController 's delegate' s navigationController:willShowViewController:animated:方法中显示/隐藏栏,具体取决于所显示的视图控制器是否为根视图控制器 .
如果在应用程序委托中设置布尔变量并在set中将布尔值相应地设置为子视图为0并在其他视图中设置为1,那么该怎么办?在viewwillappear中,根据变量的值,可以设置动画 .