UINavigationController pushViewController 中途暂停/冻结

Posted

技术标签:

【中文标题】UINavigationController pushViewController 中途暂停/冻结【英文标题】:UINavigationController pushViewController pauses/freezes midway through 【发布时间】:2013-11-11 23:19:09 【问题描述】:

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

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

但动画在中途滞后/暂停半秒。动画不完整。这是gif;

【问题讨论】:

您是否尝试过分配UIViewController 之前推送到它? @msgambel 它是在推送之前分配的。首先计算内部表达式,然后计算外部表达式。我没有尝试过,但我不明白这有什么不同......这是同一件事。 @msgambel 刚试过,没什么区别... 你在真机上试过了吗? @0xSina 那就不知道了。也许您因为运行太多而遇到内存分配问题?您是否尝试过打开慢速动画来查看发生了什么? 【参考方案1】:

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

是否在代码中将阴影添加到将被新 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 版本中)创建的,甚至可能会有所不同。

【讨论】:

背景颜色没有设置,所以我猜是“默认”(清楚吗?)。无论如何,将呈现的视图控制器更改为 whiteColor 解决了这个问题。谢谢。 设置背景颜色对我来说也是如此。 ***.com/questions/8833631/… 非常感谢.. 如果视图清晰阻碍了过渡,请使用颜色。这很奇怪。 现在是 2021 年,这仍然是解决方案。谢谢!!【参考方案2】:

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

window?.backgroundColor = .white

同样在推送的视图控制器中,将其视图设置为白色。

view.backgroundColor = .white

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

以上是关于UINavigationController pushViewController 中途暂停/冻结的主要内容,如果未能解决你的问题,请参考以下文章

带有主 UINavigationController 和详细 UINavigationController 的 UISplitViewcontroller

带有 UINavigationController 的 UITabBarController,在 hidesBottomBarWhenPushed 上隐藏 UINavigationController

在 UINavigationController 内的 UITabBarcontroller 中添加 UINavigationController?

UINavigationController 与 AppDelegate 中的 UISegmentedControl 切换 UINavigationController 的 rootviewcontr

从一个 UINavigationController 到另一个 UINavigationController (Swift iOS 9, xcode 7)

UINavigationController