如何在另一个视图关闭时从 window 中删除视图?

How to remove view from window when another view closes?

所以我有一个自定义视图,在该自定义视图中我呈现另一个这样的视图

UIApplication.shared.keyWindow!.addSubview(self.customView2)

它是一个下拉菜单,所以我需要将它放在自定义视图边界之外的所有内容之上,所以问题是,当我的自定义视图移出时,我可以将它从 window 中删除吗? 我尝试了 func willMove(toWindow newWindow: UIWindow?) ,它可以正常工作,但有延迟,这是不可取的。

如果你不想延迟删除你的customView,你可以使用removeFromSuperview()

func doSomething() {
   customView2 = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
   customView2?.backgroundColor = UIColor.blue
   UIApplication.shared.keyWindow!.addSubview(customView2!) // Your custom view is on Screen now

   //Your code ...

   customView2?.removeFromSuperview() //Time to remove your custom view from screen directly
}


已更新

如果用户在屏幕上时在导航控制器中向前或向后移动,您想删除自定义视图。

最好的方法是使用 UIViewController override func.

viewWillDisappear 覆盖函数在活动视图控制器从屏幕上移除时被调用。

所以你应该在 viewWillDisappear 覆盖函数中使用 customView2?.removeFromSuperview()。

override func viewWillDisappear(_ animated: Bool) {
   super.viewWillDisappear(animated)
   customView2?.removeFromSuperview()
}

这样,如果用户向前或向后移动,您的自定义视图将从屏幕上消失