代码之家  ›  专栏  ›  技术社区  ›  Markussen

在当前上下文上以模式呈现时,在展开时,不会调用viewDidAppear

  •  6
  • Markussen  · 技术社区  · 7 年前

    我正在开发的应用程序有问题。

    • XCode版本:9.2(9C40b)
    • 编程语言:Swift 4
    • 应用程序的目标iOS版本:11.2

    脚本 :我有一个mainVC(ViewController),它调用一个modally-presented-secondaryVC。在secondaryVC中进行选择后,我按一个UIButton,通过一个展开段返回主VC。

    在secondaryVC中,transition配置为“Cross Disolve”,Presentation配置为“Over Current Context”,以将上一个视图视为背景(背景配置为50%不透明度):

    enter image description here

    症状 :在此场景中,当返回到展开序列时,不会调用viewDidAppear。我需要调用它以执行进一步的检查函数。如果我将演示文稿设置为“全屏”,而不是“过当前上下文”,则会调用它,但在这种情况下,我无法将以前的视图视为背景。

    问题 :如何使viewDidApper在secondaryVC上保持比主VC更高的透明度?

    附言:如果我在写这个问题时遗漏了什么,我很抱歉;这是我的第一次。我在这个论坛和其他论坛上搜索过,但没有找到解决方案(或者我还没有找到)。

    1 回复  |  直到 7 年前
        1
  •  8
  •   Upholder Of Truth Yawar    7 年前

    未调用viewDidAppear的原因是第一个视图控制器从未消失。如果使用“Over Current Context”,则仍然可以在视图控制器2后面看到视图控制器1(假设有透明部分)。因此,视图控制器1保持可见,从不消失,因此,当视图控制器2显示时,不会调用ViewWillEverge或ViewDidEverge。然后,当您向后展开时,第二个视图控制器消失,但第一个视图控制器不显示,因此不会调用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)
        }
    

    基本上,所做的就是将所需的代码推回到主线程上,然后在展开过程完成后,您回到第一个视图控制器中。

    推荐文章