UITableViewCell文本在DispatchQueue上缩小

时间:2017-10-29 19:51:47

标签: ios swift uitableview

我的TableViewCell中有一个标签。每当我使用DispatchQueue将单元格出列时,单元格中的标签就会缩小。相反,当我简单地将其出列时,标签变为正常。 可能的原因和解决方法是什么?

在DispatchQueue之前 enter image description here

DispatchQueue之后 enter image description here

代码:

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。

1 个答案:

答案 0 :(得分:1)

无需将该功能分派到主队列,因为将始终在主队列上调用cellForRowAt:

由于您要异步调度configureCell调用,最终会从cellForRowAt:返回未配置的单元格,这会导致self.caption.sizeToFit()调用空标题(或者如果该单元格随后被调用)重复使用,它将根据之前在该单元格对象中的任何标题来确定大小。)

您可以确保configureCell触发单元格重新布局,但只删除不必要的DispatchQueue.main.async

更简单