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.
如果计数为零,我将通过以下代码将图像添加到我的视图中,否则将其删除:
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.