我有下面的代码隐藏和显示导航栏。它在第一个视图加载时隐藏,然后在调用“孩子”时隐藏。麻烦的是,当他们返回根视图时,我找不到触发它再次隐藏的事件/动作......
我在根页面上有一个手动执行操作的“测试”按钮,但它并不漂亮,我希望它是自动的。
-(void)hideBar { self.navController.navigationBarHidden = YES; } -(void)showBar { self.navController.navigationBarHidden = NO; }
我发现最好的解决方案是在第 一个视图控制器 中执行以下操作。
Objective-C
- (void)viewWillAppear:(BOOL)animated { [self.navigationController setNavigationBarHidden:YES animated:animated]; [super viewWillAppear:animated]; } - (void)viewWillDisappear:(BOOL)animated { [self.navigationController setNavigationBarHidden:NO animated:animated]; [super viewWillDisappear:animated]; }
迅速
override func viewWillAppear(_ animated: Bool) { self.navigationController?.setNavigationBarHidden(true, animated: animated) super.viewWillAppear(animated) } override func viewWillDisappear(_ animated: Bool) { self.navigationController?.setNavigationBarHidden(false, animated: animated) super.viewWillDisappear(animated) }
当您按下堆栈上的下一个时,这将导致导航栏从左侧(与下一个视图一起)UIViewController动画,并在您按下后退按钮时向左动画(与旧视图一起)UINavigationBar.
UIViewController
UINavigationBar
另请注意,这些不是委托方法,您正在覆盖UIViewController这些方法的实现,并且根据文档,您 必须在您的实现中的某处调用超级实现 。