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

Jos*_*osh 8 cocoa-touch uitabbarcontroller uinavigationcontroller ios

我在其中一个选项卡中有一个带有导航控制器的标签栏.目前,导航控制器的根视图没有显示导航栏,并且可以很好地动画到子视图中

- (void)viewDidLoad {
   ...
   [self.navigationController setNavigationBarHidden:YES animated:NO];
   ...
}
Run Code Online (Sandbox Code Playgroud)

- (void)viewWillAppear:(BOOL)animated {
    [self.navigationController setNavigationBarHidden:YES animated:YES];
}

- (void)viewWillDisappear:(BOOL)animated {
    [self.navigationController setNavigationBarHidden:NO animated:YES];
}
Run Code Online (Sandbox Code Playgroud)

但是当然更改选项卡会启动该viewWillAppear功能,因此当我返回到根视图时,导航栏会滑落,而不是仅仅不在那里.

有没有办法可以隐藏根视图上的导航栏而不动画它除了从导航堆栈上的子视图出现时?

Can*_*Can 15

(BOOL)animated对参数viewWillAppear:animated.更改标签时,它会变为NO,因为动画是即时的.另一方面,如果它被从导航堆栈中推出弹出animated:YES,那么它将会变为YES.

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