removeFromSuperview 不适用于 UIImageView
Posted
技术标签:
【中文标题】removeFromSuperview 不适用于 UIImageView【英文标题】:removeFromSuperview doesn't work with 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
条件)。我也在主队列中完成了这个过程,以确保问题与线程无关。我想知道问题的根源在哪里?
【问题讨论】:
从其他控制器导航回同一个控制器后是否更新计数 【参考方案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 刚刚布置了它的子视图。
您的视图控制器可以覆盖此方法以在之后进行更改 视图列出了它的子视图。这个的默认实现 方法什么都不做。
【讨论】:
以上是关于removeFromSuperview 不适用于 UIImageView的主要内容,如果未能解决你的问题,请参考以下文章