滚动后,collectionView中可重用单元的子视图大小错误

时间:2017-05-10 11:06:00

标签: ios swift swift3 uicollectionview uicollectionviewcell

我有一个聊天页面的collectionView。我创建了一个名为UICollectionViewCell的{​​{1}}子类。 我有另一个类填充我的集合视图并为每个项指定TextChatCollectionViewCell(遵循UICollectionViewDelegateFlowLayout和UICollectionViewDataSource协议)。

单元格框架大小正确但滚动时子视图的框架大小错误,可能是因为CGSize返回另一个单元格的实例且子视图没有重新加载,我试图调用{{1}再次强制绘制子视图的布局,但它没有效果。

我的带有约束的单元格的xib文件:

Xib file for TextChatCollectionViewCell

我填写并返回单元格的代码:

dequeueReusableCell

我的调试输出:

layoutIfNeeded()

预期产出:

public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    guard let cell = self.manager.collectionView.dequeueReusableCell(withReuseIdentifier: "TextChatCollectionViewCell", for: indexPath) as? TextChatCollectionViewCell else {
        return UICollectionViewCell()
    }

    self.fillCellUsingMessageUUID(cell, self.messagesUUIDs[indexPath.row]) // Hide labelDate (set height to 0 for the moment), fill UITextView etc...


    print("=================\(self.messagesUUIDs[indexPath.row])===================")
    print("Cell text : " + cell.textMessage.text)
    print("Cell frame size : " + cell.frame.size.debugDescription)
    print("UITextView frame size : " + cell.textMessage.frame.size.debugDescription)
    print("UITextView parent size : " + cell.textBackgroundView.frame.size.debugDescription)
    print("Cell content view frame size : " + cell.globalView.frame.size.debugDescription)
    print("====================================")
    return cell
}

1 个答案:

答案 0 :(得分:0)

在为单元格指定新值之前,可能没有更新约束。

这是一个小代码,我希望能解决它。 layoutIfNeeded()

在为其分配新值之前,只需在Cell上调用它,例如

cell.layoutIfNeeded()

为我解决了很多问题。希望它可以帮到你。