根据视图控制器的显示方式,隐藏导航栏

我有一个标签栏与导航控制器在其中一个选项卡。 目前的导航控制器的根视图没有导航栏显示和很好的animation子视图

- (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函数,所以我回到导航栏滑动的根视图,而不是只是不在那里。

有没有一种方法,我可以隐藏在根视图上的导航栏,而没有animation,除了从导航堆栈上的子视图出现?

viewWillAppear:animated上的(BOOL)animated参数viewWillAppear:animated 。 当改变制表符时,它会变成NO ,因为animation是立即的。 另一方面,如果将它从导航堆栈按下popup animated:YES ,那么它会显示为YES

虽然这看起来像一个黑客攻击,但这是正确的方法:你不需要找出谁是调用者,而是专注于事实, 如果你的视图控制器会显示animation,你有时间做自己的animation ,如果不是,拧紧它,立即显示(或在这种情况下,隐藏)一切。

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

如果在应用程序委托中设置布尔variables,并在子视图中将布尔值设置为0,在其他视图中将值设置为1,那么该怎么办?在您的视图中,根据variables的值,可以设置animation。