我正在开发的应用程序有问题。
- XCode 版本:9.2 (9C40b)
- 编程语言:Swift 4
- 应用的目标 iOS 版本:11.2
场景:我有一个 mainVC (ViewController),它调用模态呈现的 secondaryVC。在 secondaryVC 中进行选择后,我按下 UIButton 通过展开转场返回到 mainVC。
在 secondaryVC 中,transition 配置为“Cross Disolve”,Presentation 配置为“Over Current Context”,以将前一个 View 视为背景(背景配置为 50% 不透明度):
症状:在这种情况下,当通过展开转场返回时,viewDidAppear 永远不会被调用。我需要调用它来执行进一步的检查功能。如果我将演示文稿设置为“全屏”而不是“当前上下文”,则会调用它,但在这种情况下,我无法将之前的 View 视为背景。
问题:我怎样才能让 viewDidApper 被调用,从而在主 VC 上保持 secondaryVC 的透明度?
PS:很抱歉,如果我在写这个问题时遗漏了什么;这是我的第一次。我搜索过这个论坛和其他论坛,但没有找到解决方案(或者我还没有找到)。
最佳答案
viewDidAppear 没有被调用的原因是第一个 View Controller 永远不会消失。如果您使用“Over Current Context”,那么您仍然可以在 View Controller 二后面看到 View Controller 一(假设有透明部分)。所以 View Controller 一保持可见,永远不会消失,因此当 View Controller 二显示时,既不会调用 viewWillDisappear 也不会调用 viewDidDisappear。然后,当您放松时,第二个 View Controller 消失但拳头没有出现,因此不会调用 viewWillAppear 和 viewDidAppear。
如果您使用“全屏”,那么第一个 View Controller 会消失,因此所有功能都会触发。
如果您需要在第二个 View Controller 消失并返回到第一个 View Controller 时执行某些操作,您可以将它放在 unwind 函数中。
编辑
这是执行一些代码的技巧,例如从展开的转场显示警报 View Controller :
DispatchQueue.main.async {
let ac = UIAlertController(title: "Title", message: "Message", preferredStyle: .alert)
ac.addAction(UIAlertAction(title: "Ok", style: .default, handler: nil))
self.present(ac, animated: true, completion: nil)
}
基本上所做的是将所需的代码推回主线程,它发生在展开转场完成并且您回到第一个 View Controller 中之后。
关于ios - 在当前上下文中以模态方式呈现时,在展开时,不会调用 viewDidAppear,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48043124/