关闭子视图后重新加载视图

Posted

技术标签:

【中文标题】关闭子视图后重新加载视图【英文标题】:Reload a View after Closing its subView 【发布时间】:2021-10-23 18:47:27 【问题描述】:

我有一个名为 A 的 UIViewController,我像这样向 A 控制器添加另一个控制器

  self.AView = (self.storyboard!.instantiateViewController(withIdentifier: "BView") as? BViewController)!

  self.addChild(self.BView)

  self.BView.view.frame = CGRect(x: 0, y: self.view.frame.height - 450, width: self.view.frame.width , height: 450)
  self.view.addSubview((self.BView.view)!)
  self.view.bringSubviewToFront(self.BView.view)

我正在使用下面的函数关闭它

func closeCurrentView()

   self.view.removeFromSuperview()

关闭后我需要重新加载我的 Aview

我在 My Aview 中添加了这个,但在关闭 BView 后没有被调用

override func viewWillAppear(_ animated: Bool) 
super.viewWillAppear(true)

【问题讨论】:

与问题无关,您不应该对发送给任何超级调用的参数进行硬编码。而是这样称呼它super.viewWillAppear(animated) 是的,好吧!但我的问题还没有解决 是的。这就是irrelevant to the issue 的意思。 【参考方案1】:

viewWillAppear 方法仅在视图将进入视图层次结构时调用,在这种情况下,在 BView 被移除之前,AView 已经在视图层次结构中,即使不可见(因此当 BView 被移除时不会调用 AViewController.viewWillAppear)。你有两个选择:

    将 AViewController 的引用传递给 BViewController(在初始化期间或之后),以便您可以在 BViewController 类中执行此操作:
func closeView()
   self.view.removeFromSuperview()
   self.AViewController.view.layoutIfNeeded() // or do something else to update AView

    删除 AViewController 类中的 BView:
func closeBView()
   self.BViewController.view.removeFromSuperview()
   self.view.layoutIfNeeded() // or do something else to update AView

【讨论】:

以上是关于关闭子视图后重新加载视图的主要内容,如果未能解决你的问题,请参考以下文章

重新加载collectionview后关闭视图

UITableViewCell 自定义类 - 更改子视图高度约束后重新加载单元格高度

从 iOS 中的 UIView 子视图重新加载时 UITableView 未重新加载

滚动关闭和打开后,视图重新出现在 UITableViewCell 中

modalview 关闭后 TableView 未重新加载

使用子视图中的数据重新加载 tableview