iOS 的navigationBar偶尔显示上一个页面的navigationBar

某个项目的需求是,有些页面的navigationBar要显示,有些不要显示,有些是白色,有些是黑色,有些要有底下的线,有些不要有线……总之navigationBar备受折磨。

在这种情况下,我作死地使用了系统原生的navigationBar。在ViewController的公共父类里是这么写的:

- voidviewWillAppear:BOOLanimated { [super viewWillAppear:animated]; [self.navigationController setNavigationBarHidden:self.hidesNavigationBar animated:YES]; if self.hidesBottomLine { [[WNYNavigationController sharedInstance].navigationController.navigationBar setBackgroundImage:[UIImage new] forBarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault]; [[WNYNavigationController sharedInstance].navigationController.navigationBar setShadowImage:[UIImage new]]; } else { [[WNYNavigationController sharedInstance].navigationController.navigationBar setBackgroundImage:nil forBarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault]; [[WNYNavigationController sharedInstance].navigationController.navigationBar setShadowImage:nil]; } }

一般情况下都是正常的。但是在偶然情况下,会出现这样的bug:进入新界面后,新界面的navigationBar会突然消失,出现的还是上一个界面的 navigationBar。从此以后,navigationBar 全乱了,各种错乱,比如push进的 viewController 的 navigationBar 一闪即消失,然后还是显示上一层的 bar 等等…… kill 掉重新进,恢复正常。

这种情况无法必现,并且重现概率很低,似乎跟快速地右划返回有一定关系。我现在倾向于认为是一个系统的bug。想请教大家,有遇到过类似的情况吗?请问有什么办法能尽量避免呢?谢谢!

最后找到问题所在:

在调用[self.navigationController setNavigationBarHidden:YES animated:YES];后,非常短的时间内调用[self.navigationController setNavigationBarHidden:NO animated:NO];,会导致 navigationBar 全部错乱。大概就是动画进行过程中,再去更改 navigationBar 的显示,就会错乱。

应该是系统的一个bug,只能尽量避免。要么不要短时间同时调用,要么把 animated 全都设成 YES 似乎就没有问题了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注