隐藏导航栏,具体取决于视图控制器的显示方式

时间:2011-08-18 12:35:13

标签: ios cocoa-touch uinavigationcontroller uitabbarcontroller

我有一个标签栏,其中一个标签中有导航控制器。目前导航控制器的根视图没有显示导航栏并通过

很好地动画到子视图中
- (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 个答案:

答案 0 :(得分:14)

(BOOL)animated上的viewWillAppear:animated参数。更改标签时,它将显示为NO,因为动画是即时的。另一方面,如果使用animated:YES从导航堆栈中推送弹出,则它将显示为YES

虽然这看起来像黑客,但这是正确的方法:你不需要弄清楚谁是调用者,而是专注于如果你的视图控制器将显示动画,你有时间做你自己的动画,如果没有,拧紧它,立即显示(或在这种情况下,隐藏)所有内容。

答案 1 :(得分:3)

尝试在UINavigationController的委托的navigationController:willShowViewController:animated:方法中显示/隐藏该栏,具体取决于所显示的视图控制器是否是您的根视图控制器。

答案 2 :(得分:0)

如果在应用程序委托中设置布尔变量,并在set中将布尔值相应地在子视图中设置为0,在其他视图中设置为1,该怎么办?在viewwillappear中,根据变量的值,可以设置动画。