Mar*_*sen 6 transparency viewdidappear ios swift unwind-segue
我有一个我正在开发的应用程序的问题.
场景:我有一个mainVC(ViewController),它调用一个模态呈现的secondaryVC.在secondaryVC中进行选择后,我按下UIButton,通过展开segue返回mainVC.
在secondaryVC中,转换配置为"Cross Disolve"和Presentation,作为"Over Current Context"以将上一个视图视为背景(背景配置为50%不透明度):
症状:在这种情况下,当通过展开segue返回时,viewDidAppear永远不会被调用.我需要调用它来执行进一步的检查功能.它被调用,如果不是"过度上下文",我将演示文稿设置为"全屏",但在这种情况下,我无法将前一个视图视为背景.
问题:如何通过mainVC调用viewDidApper来保持secondaryVC的透明度?
PS:对不起,如果我在写这个问题时遗漏了什么; 这是我的第一次.我搜索了这个和其他论坛,我还没有找到解决方案(或者我没有找到它).
之所以没有调用viewDidAppear,是因为第一个视图控制器永远不会消失。如果您使用“ Over Current Context”,那么您仍然可以在视图控制器2后面看到一个视图控制器(假设您有透明的部分)。因此,视图控制器1保持可见,不会消失,因此,在显示视图控制器2时,不会调用viewWillDisappear或viewDidDisappear。然后,当您退后时,第二个视图控制器消失了,但没有出现拳头,因此未调用viewWillAppear和viewDidAppear。
如果您使用“全屏”,则第一个视图控制器会消失,因此所有功能都会触发。
如果在第二个视图控制器消失后又需要执行某些操作,然后返回第一个视图控制器,则可以将其置于展开功能中。
编辑
这是执行一些代码的技巧,例如从轻松的显示中显示警报视图控制器:
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)
}
Run Code Online (Sandbox Code Playgroud)
基本上,完成的工作是将所需的代码推回到主线程上,并且在完成展开任务并且您回到第一个视图控制器之后,它才发生。