此错误最初是在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中),导航栏将陷入困惑SATE。
以下是演示此问题的演示:[演示]:https://github.com/heistings/NavigationTest
这个问题可以通过禁用导航控制器的interactivePopGestureRecognizer来解决,但不能说它是完美的:
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
答案 0 :(得分:3)
将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];
}
也许这会对你有帮助。
答案 1 :(得分:1)
这可能是解决此问题的最佳方式,因为我们从框架中获得了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];
}
答案 2 :(得分:0)
我遇到了你的问题。 首先将导航控制器嵌入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];
}