我的TableViewCell中有一个标签。每当我使用DispatchQueue将单元格出列时,单元格中的标签就会缩小。相反,当我简单地将其出列时,标签变为正常。 可能的原因和解决方法是什么?
代码:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let post = posts[indexPath.row]
if let cell = tableView.dequeueReusableCell(withIdentifier: "FeedCell") as? FeedCell {
DispatchQueue.main.async {
cell.configureCell(post: post)
}
return cell
} else {
return FeedCell()
}
}
FeedCell(UITableViewCell)中标签布局的代码:
override func layoutSubviews() {
super.layoutSubviews()
contentView.layoutIfNeeded()
self.caption.sizeToFit()
}
contentView
是标签所在的UIView。
答案 0 :(得分:1)
无需将该功能分派到主队列,因为将始终在主队列上调用cellForRowAt:
。
由于您要异步调度configureCell
调用,最终会从cellForRowAt:
返回未配置的单元格,这会导致self.caption.sizeToFit()
调用空标题(或者如果该单元格随后被调用)重复使用,它将根据之前在该单元格对象中的任何标题来确定大小。)
您可以确保configureCell
触发单元格重新布局,但只删除不必要的DispatchQueue.main.async