呈现全屏时的透明视图控制器背景

Posted

技术标签:

【中文标题】呈现全屏时的透明视图控制器背景【英文标题】:Transparent View Controller Background When Presented Full Screen 【发布时间】:2017-03-12 05:15:20 【问题描述】:

我在另一个(A) 上展示了一个视图控制器(B),我希望B 的背景是透明的,这样A 在背景中仍然可见。

因此,在呈现 B 之前,将其 modalPresentationStyle 设置为 .overCurrentContext 并且 B 具有 view.backgroundColor = UIColor.clear 以便呈现透明背景。

但是,当我解除 B 并返回 A 时,不会重新触发 A 的方法,例如 viewDidAppearviewWillAppear 等。

如果我将上面的modalPresentationStyle 更改为.fullScreenviewWillAppear 等会在返回 A 时重新触发,但这一次,我失去了透明背景。

总而言之,当我返回 A 时,如何在呈现的视图上实现透明背景以及在 A 上重新触发诸如 viewDidAppear 之类的方法?

【问题讨论】:

【参考方案1】:

当您全屏显示时,显示视图会从视图中移除 - 因此通过透明视图看不到任何东西。所以这个方法不适合你。

当您在当前上下文中呈现时,呈现视图仍然存在 - 但这就是 为什么 viewDidAppear 等不被调用 - 它从未消失,因此它没有重新出现。

使用另一种方法来检测您的透明视图已被关闭,而不是 viewDidAppear,例如 unwind segue 或this SO answer 中讨论的其他方法之一。

【讨论】:

以上是关于呈现全屏时的透明视图控制器背景的主要内容,如果未能解决你的问题,请参考以下文章

如何呈现具有透明背景的模态视图控制器

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

iOS:具有透明背景的模态 ViewController

具有透明背景的模态 UISplitViewController

如何在 iOS 中呈现一个半透明(半切)的视图控制器?

iOS - 半透明模态视图控制器