导航栏进入混乱状态
Navigation bar goes into confusional state
这个bug是在iOS 7中首次发现的,在iOS 8中也可以重现。
有三个视图控制器A、B 和C。由UINavigationController 管理。我想隐藏控制器 A 的导航栏,而不是其他控制器。
这是我为控制器 A 编写的代码。
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
self.navigationController.navigationBarHidden = YES;
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
self.navigationController.navigationBarHidden = NO;
}
当用户通过导航 backBarButtonItem 返回时,对我来说效果很好。但是当用户从左侧滑动 backwards
和 forward
时(即实际上并没有从控制器 B 返回到控制器 A,而是最终停留在控制器 B),导航栏会变得混乱满足。
这里有一个演示来说明这个问题:[Demo]:https://github.com/heistings/NavigationTest
这个问题可以通过禁用导航控制器的 interactivePopGestureRecognizer 来简单解决,但不能说它是完美的:
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
使用 animated
属性 到 YES
。
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
也许这会对你有所帮助。
这可能是解决此问题的最佳方法,因为我们已经从框架中获得了 animated
:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:animated];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.navigationController setNavigationBarHidden:NO animated:animated];
}
我知道你的问题了。
首先将导航控制器嵌入到 ViewController...
- 点击故事板...
- 单击视图控制器...
- 转到编辑器部分。
- 点击嵌入,然后点击导航控制器。
然后写下下面的代码:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:animated];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.navigationController setNavigationBarHidden:NO animated:animated];
}
这个bug是在iOS 7中首次发现的,在iOS 8中也可以重现。
有三个视图控制器A、B 和C。由UINavigationController 管理。我想隐藏控制器 A 的导航栏,而不是其他控制器。
这是我为控制器 A 编写的代码。
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
self.navigationController.navigationBarHidden = YES;
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
self.navigationController.navigationBarHidden = NO;
}
当用户通过导航 backBarButtonItem 返回时,对我来说效果很好。但是当用户从左侧滑动 backwards
和 forward
时(即实际上并没有从控制器 B 返回到控制器 A,而是最终停留在控制器 B),导航栏会变得混乱满足。
这里有一个演示来说明这个问题:[Demo]:https://github.com/heistings/NavigationTest
这个问题可以通过禁用导航控制器的 interactivePopGestureRecognizer 来简单解决,但不能说它是完美的:
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
使用 animated
属性 到 YES
。
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
也许这会对你有所帮助。
这可能是解决此问题的最佳方法,因为我们已经从框架中获得了 animated
:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:animated];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.navigationController setNavigationBarHidden:NO animated:animated];
}
我知道你的问题了。 首先将导航控制器嵌入到 ViewController...
- 点击故事板...
- 单击视图控制器...
- 转到编辑器部分。
- 点击嵌入,然后点击导航控制器。
然后写下下面的代码:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:animated];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.navigationController setNavigationBarHidden:NO animated:animated];
}