【发布时间】:2015-03-24 06:38:30
【问题描述】:
这个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;
【问题讨论】:
-
是的,你是对的,这似乎只是 iOS 的错误。
-
@iphonic 不知道它是否是一个错误,但使用动画属性可以实现这一点。
-
这实际上不是一个错误。正如你已经说过的,
navigationBar真的很困惑,因为在 iOS7 上进行了更改。从 iOS7 开始,viewWillAppear:方法并不意味着视图会出现,而是视图可能出现或不出现。viewWillDisappear方法相同。因此,在viewDidAppear:方法上执行出现视图的任务是合适的。而且,有一种方法可以确定视图是否真的会出现在viewWillAppear:方法上,现在找不到,但您可以四处搜索。 -
@ChintaN-Maddy-Ramani 使用
[self.navigationController setNavigationBarHidden:YES animated:NO];仍然会带来这个问题。
标签: ios objective-c ios7