【问题标题】:removeFromSuperview doesn't work with UIImageViewremoveFromSuperview 不适用于 UIImageView
【发布时间】:2018-04-23 22:17:10
【问题描述】:

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

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 条件)。我也在主队列中完成了这个过程,以确保问题与线程无关。我想知道问题的根源在哪里?

【问题讨论】:

  • 从其他控制器导航回同一个控制器后是否更新计数

标签: ios swift uiview uiimageview


【解决方案1】:

viewWillAppear 中,视图还没有完全准备好查看。所以 removeFromSuperview 没有任何效果。相反,我们应该在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() 调用以通知视图控制器它的 view 刚刚布置了它的子视图。

您的视图控制器可以覆盖此方法以在之后进行更改 视图列出了它的子视图。这个的默认实现 方法什么都不做。

【讨论】:

    猜你喜欢
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多