我有一个主视图,它通过一个按钮链接到第二个视图,并通过导航栏中的“返回”按钮链接回来。我想在主视图中隐藏导航栏,只在场景视图中显示。
我在主视图上隐藏了导航栏,在第一次启动时它看起来不错,但是一旦第二个视图从堆栈中弹出,主视图上就会出现一个空的导航栏。
有什么方法可以检测主视图当前是否可见,然后随时隐藏导航栏?或者我遇到的问题的任何其他修复?
预先感谢您的任何帮助。
我有一个主视图,它通过一个按钮链接到第二个视图,并通过导航栏中的“返回”按钮链接回来。我想在主视图中隐藏导航栏,只在场景视图中显示。
我在主视图上隐藏了导航栏,在第一次启动时它看起来不错,但是一旦第二个视图从堆栈中弹出,主视图上就会出现一个空的导航栏。
有什么方法可以检测主视图当前是否可见,然后随时隐藏导航栏?或者我遇到的问题的任何其他修复?
预先感谢您的任何帮助。
这将通过您的 navigationController 堆栈中的视图控制器运行。一旦你找到你的班级,做任何你必须做的事情!
for ( UIViewController *vc in [self.navigationController viewControllers]) {
if ([vc isKindOfClass:[YourClass class]]) {
// do something
}
}
编辑
这将检查您的主视图控制器是否正在显示:
if ([[self.navigationController topViewController] isKindOfClass:[yourmainviewcontroller class]]){
self.navigationController.navigationBarHidden = YES;
}else{
self.navigationController.navigationBarHidden = NO;
}
你这样做有点错误。无需在堆栈上查找特定的视图控制器并更改其属性,而是直接在两个视图控制器内进行。使用 viewWillAppear:
和viewWillDisappear:
方法:
第一个(顶部)视图控制器:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[[self navigationController] setNavigationBarHidden:YES animated:YES];
}
第二个(子)视图控制器:
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[[self navigationController] setNavigationBarHidden:YES animated:YES];
}
子视图控制器中的代码是可选的,如果您有更多的子视图控制器,则不应使用它。