UIViewController 被另一个全屏视图控制器覆盖,但没有从层次结构中删除

Posted

技术标签:

【中文标题】UIViewController 被另一个全屏视图控制器覆盖,但没有从层次结构中删除【英文标题】:UIViewController is covered by another fullscreen view controller, but not removed from the hierarchy 【发布时间】:2017-06-14 18:57:51 【问题描述】:

参与者

AC 是具有纯色背景的视图控制器。默认设置没有任何变化。 B 是一个具有半透明背景的视图控制器。它应该覆盖它所呈现的视图控制器的一部分。 ModalPresentation 样式为overFullScreen

短篇小说A 呈现BB 呈现CviewWillDisappear 永远不会被 A 调用

长篇大论

A 在屏幕上 A 呈现 B 并拨打以下电话:self.present(B, animated: true) AB 在屏幕上都可见。 AviewWillDisappear 方法调用,这是预期的,因为它仍然可见 B 提出 C 并拨打以下电话:self.present(C, animated: true) C 出现在屏幕上,涵盖了一切,它的演示模式是fullscreenB 已从视图层次结构中移除。调用BviewWillDisappear方法 检查视图层次结构我可以看到A 仍然存在,并且从未在A 上调用viewWillDisappear,但它也不可见,因为它被全屏视图控制器覆盖。

我希望 AB 一起从层次结构中删除,因为如果被 fullscreen 视图控制器覆盖,它们都不可见。

是 UIKit 的 bug 还是我做错了?

【问题讨论】:

【参考方案1】:

Per the documentation,这是UIModalPresentationStyle.overFullScreen 的预期行为。另一种风格——.fullScreen——似乎更接近你想要的行为。

【讨论】:

呈现 A (.fullScreen) -> B (.overFullscreen, 我希望此时部分覆盖 A) -> C (.fullScreen) 导致 A -> C 在层次结构中。 B 按预期删除,但为什么 A 没有被删除,因为它也被 .fullScreen 视图控制器覆盖?

以上是关于UIViewController 被另一个全屏视图控制器覆盖,但没有从层次结构中删除的主要内容,如果未能解决你的问题,请参考以下文章

非全屏和全屏 UIViewController 之间的漂亮幻灯片过渡

在一个 UIVIewController 中有两个垂直的全屏 UIViews?

在不覆盖全屏的 UIViewController 中模态显示 UIViewController

iPad/iOS:管理多个全屏视图?

在 Objective-C 中让我的 UIViewController 全屏显示

检测 UIAlertController 何时被另一个 UIViewController 解除