UINavigationController pushViewController在中途暂停/冻结

时间:2013-11-11 23:19:10

标签: ios objective-c cocoa-touch

我正在通过以下方式推送视图控制器:

[self.navigationController pushViewController:[[UIViewController alloc] init] animated:YES];

但动画在中途滞后/暂停了半秒钟。动画未完成。这是gif;

enter image description here

3 个答案:

答案 0 :(得分:48)

有了更多细节,我可以想到2个可能的问题。

  • 是否在代码中添加了Shadow,以便新ViewController将覆盖该视图。如果是这种情况,请使用ShadowPath或半透明视图(动画中的Shadow属性很昂贵,已经完成了)

  • 新ViewController的backgroundColor是“clearColor”吗?我见过这种奇怪的渲染问题。

尝试:

UIViewController *vc = [[UIViewController alloc] init];  
vc.view.backgroundColor = [UIColor whiteColor];  
[self.navigationController pushViewController:vc animated:YES];

这是我可以想到的两个可能的问题,只有很少的细节。


永远不要依赖于默认的背景颜色,它在iOS版本中有所变化,并且在控件之间不一致,如果视图是在代码中创建的,或者是从Xib(在相同的iOS版本中)创建的,那么甚至可能会有所不同。

答案 1 :(得分:1)

在应用程序委托中,将窗口的背景色设置为白色。

window?.backgroundColor = .white

还要在推送视图控制器中将其视图设置为白色。

view.backgroundColor = .white

以编程方式将视图控制器嵌入UINavigationController时,遇到了相同的问题。

答案 2 :(得分:0)

虽然将背景颜色设置为suggested by VinceBurn解决了暂停问题,但它使整个动画变为白色,仅在动画结束时淡化实际内容。

对我来说,通过确保内容在-viewDidLoad中正确调整大小来解决问题。