我需要在viewControllers堆栈上推送两个视图控制器,这是代码的简化版本:
NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:navigationController.viewControllers];
[viewControllers addObject:vc1];
[viewControllers addObject:vc2];
[navigationController setViewControllers:viewControllers animated:YES];
它在大多数时间都有效,但是在某些设备上有时无效。当它不起作用时,该代码从字面上看(视觉上)不起任何作用,则屏幕上不会出现新视图。逐步调试不会发现任何异常,视图已正确初始化,并且确实添加在viewControllers堆栈的顶部。
将代码更改为两次使用pushViewController
而不是setViewControllers
并不能解决问题。但是,我发现最奇怪的修补程序效果非常好:
NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
[viewControllers addObject:vc1];
[viewControllers addObject:vc2];
[self.navigationController setViewControllers:viewControllers animated:YES];
// The following two lines fix the issue
[[UIApplication sharedApplication] setStatusBarHidden:YES
withAnimation:UIStatusBarAnimationNone];
[[UIApplication sharedApplication] setStatusBarHidden:NO
withAnimation:UIStatusBarAnimationNone];
这是一个糟糕的技巧,尤其是考虑到setStatusBarHidden:withAnimation:is deprecated since iOS 9。
setStatusBarHidden:
会导致viewControllers堆栈正确显示吗?
答案 0 :(得分:0)
您认为事后后果吗?
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,(int64_t)(0.1 * NSEC_PER_SEC)),dispatch_get_main_queue(),^ { [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone]; });
还可以:在视图控制器或导航控制器中使用:
-(BOOL)statusBarHidden { 返回是; }