removeFromSuperview 不适用于 UIImageView

removeFromSuperview doesn't work with UIImageView

如果计数为零,我将通过以下代码将图像添加到我的视图中,否则将其删除:

var coverImageView = UIImageView()

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

    if count == 0 {
        let coverImage = UIImage(named: "AddFirstRecord")!
        coverImageView = UIImageView(image: coverImage)
        coverImageView.frame = CGRect(x: 20, y: 5, width: tableView.frame.width-20, height: 100)
        view.addSubview(coverImageView)

    } else {
        DispatchQueue.main.async {
            self.coverImageView.removeFromSuperview()
        }
    }
}

问题是它将图像添加到视图,但 removeFromSuperview 不起作用。 (我通过调试确保它达到了 else 条件)。我也在主队列中执行了该过程,以确保问题与线程无关。请问问题出在哪里?

viewWillAppear视图还没有完全准备好查看。所以 removingFromSuperview 没有任何效果。相反,我们应该在 viewDidLayoutSubviews:

中执行操作
override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    if fetchedResultsController.fetchedObjects?.count == 0 {
        let coverImage = UIImage(named: "AddFirstRecord")!
        coverImageView.image = coverImage
        coverImageView.frame = CGRect(x: 20, y: 5, width: tableView.frame.width-20, height: 100)
        view.addSubview(coverImageView)

    } else {
        coverImageView.removeFromSuperview()
    }
}

来自 Apple Documentation :

viewDidLayoutSubviews() Called to notify the view controller that its view has just laid out its subviews.

Your view controller can override this method to make changes after the view lays out its subviews. The default implementation of this method does nothing.