UIKit 错误? viewWillAppear 在应该被调用时没有被调用 [关闭]

Posted

技术标签:

【中文标题】UIKit 错误? viewWillAppear 在应该被调用时没有被调用 [关闭]【英文标题】:UIKit bug? viewWillAppear not called when it should be [closed] 【发布时间】:2018-03-13 02:32:59 【问题描述】:

https://github.com/trapper-/unballanced

我在我正在处理的项目中发现了一个错误,并将其提取到上面链接的一个简单示例中。我认为这可能是一个 UIKit 错误。

基本上 VC1 在 containerVC 中,然后 VC2 在当前上下文中以模态方式呈现(因此它也被包含),然后 VC3 以模态方式全屏呈现。现在,当我们解散返回 VC1 时,将缺少 VC1 的 viewWillAppear。这也会导致控制台警告。

Unbalanced calls to begin/end appearance transitions for <ViewController1: 0x7f9c5970afc0>

这是您将在控制台中看到的内容。

演示时

ViewController1 viewWillAppear
ViewController1 viewDidAppear
ViewController1 viewWillDisappear
ViewController2 viewWillAppear
ViewController2 viewDidAppear
ViewController1 viewDidDisappear
ViewController2 viewWillDisappear
ViewController3 viewWillAppear
ViewController3 viewDidAppear
ViewController2 viewDidDisappear

解散时

ViewController3 viewWillDisappear
ViewController2 viewWillAppear
ViewController2 viewDidAppear
ViewController3 viewDidDisappear
ViewController2 viewWillDisappear
Unbalanced calls to begin/end appearance transitions for <ViewController1: 0x7f9c5970afc0>.
ViewController1 viewDidAppear
ViewController2 viewDidDisappear

您可以看到缺少的ViewController1 viewWillAppearUnbalanced calls to begin/end appearance transitions 消息。

这个问题有什么解决办法吗?

【问题讨论】:

可能是踩踏问题。尝试使用 GCD 延迟动作 这个问题怎么跑题了?我在 github 上链接了“最小、完整和可验证的示例”。 一年前我也遇到过同样的问题,就我而言,在推送和弹出动画期间,出现了此消息(对 的开始/结束外观转换的不平衡调用),在那段时间我面临一些有线行为。最后我修复了 GCD 延迟功能。你还有一个选择。停止推送和弹出动画。这可能是解决办法。 【参考方案1】:

看起来像一个 ios 错误。不确定它是否对您的实际应用有帮助,但在您的 VC2 演示文稿中从 Current Context 更改为 Over Current Context 确实有效,并且在视觉上看起来与我所见的相同。

文档似乎表明Over Current ContextUIModalPresentationFullScreen 的替代品,但它也显然使用当前上下文,所以我认为你的情况的真正区别只是在 VC2 之后没有删除 VC1已提交。

当使用 UIModalPresentationFullScreen 样式,UIKit 通常会移除视图 过渡动画后的底层视图控制器 结束。您可以通过指定 取而代之的是 UIModalPresentationOverCurrentContext 样式。你可能会使用 当呈现的视图控制器具有透明区域时的样式 让底层内容显示出来。

Docs on View Controller Programming

【讨论】:

以上是关于UIKit 错误? viewWillAppear 在应该被调用时没有被调用 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

iOS viewWillAppear 错误:“视图不在窗口层次结构中”

词法或预处理器问题错误(未找到 UIKit/UIKit.h 文件)

解析错误“无法构建模块'UIKit'”但应用程序运行正常

奇怪的 UIKit 错误,表格视图行保持选中状态

“这个 UIView 似乎是它不知道的 NSISVariable 的代表。这是一个内部 UIKit 错误”错误

无法解决“无法构建模块“UIKit”