我正在使用聊天应用界面,当我向上和向下滚动时,我的图标图像消失了。我知道这可能是由于集合视图单元格的出列性质。 SO上的这个post表明这可以通过缓存图像来解决。但是,在我的应用程序中,我的图标图像加载到资产中,而不是从URL下载。
到目前为止我的代码:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! ChatBubbleCollectionViewCell
let item = messages[indexPath.item]
if item.fromUserUID == fromUserUID {
cell.bubbleView.backgroundColor = .customPink
cell.textView.text = item.message
cell.textView.textColor = .white
cell.imageTextView.textColor = .white
cell.bubbleLeftAnchor.isActive = false
cell.bubbleRightAnchor.isActive = true
if let _ = item.imageUrl {
cell.imageIconView.image = UIImage(named: "ic_photo_white")
}
} else {
cell.bubbleView.backgroundColor = .faintGray
cell.textView.text = item.message
cell.textView.textColor = .black
cell.imageTextView.textColor = .darkGray
cell.bubbleLeftAnchor.isActive = true
cell.bubbleRightAnchor.isActive = false
if let _ = item.imageUrl {
cell.imageIconView.image = UIImage(named: "ic_photo_pink")
}
}
let longPressGesture = UILongPressGestureRecognizer(target: self, action: #selector(longPressOnImage))
longPressGesture.minimumPressDuration = 1
if let message = item.message {
cell.bubbleWidthAnchor.isActive = false
cell.bubbleWidthAnchor.constant = estimatedFrame(for: message).width + 11
cell.bubbleWidthAnchor.isActive = true
cell.bubbleHeightAnchor.isActive = false
cell.imageContainerView.isHidden = true
cell.textView.isHidden = false
cell.messageImageView.isHidden = true
cell.removeGestureRecognizer(longPressGesture)
} else {
cell.bubbleWidthAnchor.isActive = false
cell.bubbleWidthAnchor.constant = 120
cell.bubbleWidthAnchor.isActive = true
cell.bubbleHeightAnchor.isActive = true
cell.messageImageView.isHidden = true
cell.imageTextView.text = "Fetching..."
if let imageReadReceipt = item.readReceipt {
if imageReadReceipt {
DispatchQueue.main.async {
cell.imageTextView.text = "Deleted"
cell.imageIconView.image = UIImage(named: "ic_visibility_off")
cell.isUserInteractionEnabled = false
}
} else {
if let imageUrlString = item.imageUrl {
cell.messageImageView.sd_setImage(with: URL(string: imageUrlString), completed: { (image, error, cache, url) in
if let error = error {
print(error.localizedDescription)
} else if let _ = image {
DispatchQueue.main.async {
cell.isUserInteractionEnabled = true
cell.imageContainerView.isHidden = false
cell.imageTextView.text = "Tap and hold to view"
cell.textView.isHidden = true
cell.imageContainerView.addGestureRecognizer(longPressGesture)
}
}
})
}
}
}
}
return cell
}
cellForRow需要做很多事情,我怀疑这是图标消失的原因。它必须确定是接收还是发送消息(以便可以在左侧或右侧绘制气泡),或者消息是图像消息还是文本消息。
上下各种卷轴后,结果如下:
可以观察到deleteIcon图像已经删除了“已删除”文本。有人会帮忙指出我哪里出错了吗?感谢。