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)