尝试使用tableView在我的应用程序中添加聊天功能,但是每当我滚动聊天时,某些单元格就会消失,我不确定为什么。任何帮助表示赞赏。
tableView连接到dataSource并在情节提要中委托。
我已经在xib文件中创建了该单元格本身,并且取决于是发件人消息还是接收到的消息,该单元格将显示不同。 这是每个单元格的代码:
finish()
这是检索消息的方法:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "customMessageCell", for: indexPath) as! CustomMessageCell
//Sets cell to message
senderId = messageArray[indexPath.row].fromId
if senderId == Auth.auth().currentUser?.uid as String? {
//Messages We Sent
cell.ourMessageBody.text = messageArray[indexPath.row].messageBody
cell.ourMessageBackground.backgroundColor = UIColor(displayP3Red: 59/255.0, green: 89/255.0, blue: 152/255.0, alpha: 1)
cell.ourMessageBody.textColor = UIColor.white
cell.avatarImageView.isHidden = true
cell.messageBackground.isHidden = true
} else{
//Messages someone else sent
cell.messageBody.text = messageArray[indexPath.row].messageBody
cell.avatarImageView.backgroundColor = UIColor(white: 0.95, alpha: 1)
cell.messageBackground.backgroundColor = UIColor(white: 0.95, alpha: 1)
cell.ourMessageBackground.isHidden = true
//toId ProfileImage
if let imageID = toId{
print(imageID)
let imagesStorageRef = Storage.storage().reference().child("profilepic/").child(imageID)
imagesStorageRef.getData(maxSize: 1*1024*1024, completion: { (data, error) in
if error != nil{
print(error)
return
}
DispatchQueue.main.async {
cell.avatarImageView?.image = UIImage(data: data!)
}
})
}
}
return cell
}
这是结果:
答案 0 :(得分:1)
您的代码是错误的,因为您一次配置了单元格(使用tableView:cellForRowAt:
方法),但是如果用户交替滚动表格视图时,avatarImageView
,messageBackground
和{ {1}}最终将全部隐藏。
尝试像这样更新您的代码:
ourMessageBackground
此外,由于在后台进行化身获取,因此在检索数据时单元可能已更改。因此,您必须确保该单元格仍然显示。并且您应该缓存化身,以避免每次都获取它。