UIViewController 被另一个全屏视图控制器覆盖,但没有从层次结构中删除
Posted
技术标签:
【中文标题】UIViewController 被另一个全屏视图控制器覆盖,但没有从层次结构中删除【英文标题】:UIViewController is covered by another fullscreen view controller, but not removed from the hierarchy 【发布时间】:2017-06-14 18:57:51 【问题描述】:参与者:
A
和 C
是具有纯色背景的视图控制器。默认设置没有任何变化。
B
是一个具有半透明背景的视图控制器。它应该覆盖它所呈现的视图控制器的一部分。 ModalPresentation 样式为overFullScreen
短篇小说:A
呈现B
,B
呈现C
。 viewWillDisappear
永远不会被 A
调用
长篇大论:
A
在屏幕上
A
呈现 B
并拨打以下电话:self.present(B, animated: true)
A
和 B
在屏幕上都可见。 A
的 viewWillDisappear
方法未调用,这是预期的,因为它仍然可见
B
提出 C
并拨打以下电话:self.present(C, animated: true)
C
出现在屏幕上,涵盖了一切,它的演示模式是fullscreen
。
B
已从视图层次结构中移除。调用B
的viewWillDisappear
方法
检查视图层次结构我可以看到A
仍然存在,并且从未在A
上调用viewWillDisappear
,但它也不可见,因为它被全屏视图控制器覆盖。
我希望 A
与 B
一起从层次结构中删除,因为如果被 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