我有一个聊天页面的collectionView。我创建了一个名为UICollectionViewCell
的{{1}}子类。
我有另一个类填充我的集合视图并为每个项指定TextChatCollectionViewCell
(遵循UICollectionViewDelegateFlowLayout和UICollectionViewDataSource协议)。
单元格框架大小正确但滚动时子视图的框架大小错误,可能是因为CGSize
返回另一个单元格的实例且子视图没有重新加载,我试图调用{{1}再次强制绘制子视图的布局,但它没有效果。
我的带有约束的单元格的xib文件:
我填写并返回单元格的代码:
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
}
答案 0 :(得分:0)
在为单元格指定新值之前,可能没有更新约束。
这是一个小代码,我希望能解决它。
layoutIfNeeded()
在为其分配新值之前,只需在Cell上调用它,例如
cell.layoutIfNeeded()
为我解决了很多问题。希望它可以帮到你。