UIKit的bug? viewWillAppear应该在什么时候调用

时间:2018-03-13 02:33:00

标签: ios objective-c uiviewcontroller uikit

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

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

基本上VC1在容器VC中,然后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消息。

此问题的任何解决方案?

1 个答案:

答案 0 :(得分:0)

似乎是一个iOS错误。不确定它是否对您的真实应用程序有帮助,但是在您的VC2演示文稿中从Current Context更改为Over Current Context实际上是可行的,并且在视觉上看起来与我所看到的相同。

文档似乎表明Over Current ContextUIModalPresentationFullScreen的替代品,但它也清楚地使用了当前的上下文,所以我认为你的情况的真正区别仅在于VC1不是在VC2出现后删除。

  

使用时显示视图控制器   UIModalPresentationFullScreen样式,UIKit通常会删除视图   转换动画后的基础视图控制器   完。您可以通过指定来阻止删除这些视图   而是UIModalPresentationOverCurrentContext样式。你可能会用   当呈现的视图控制器具有透明区域时的样式   让基础内容显示出来。

Docs on View Controller Programming