Swift tableView单元格在滚动中消失

时间:2018-11-03 14:09:35

标签: swift uitableview message

尝试使用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
}

这是结果:

enter image description here

1 个答案:

答案 0 :(得分:1)

您的代码是错误的,因为您一次配置了单元格(使用tableView:cellForRowAt:方法),但是如果用户交替滚动表格视图时,avatarImageViewmessageBackground和{ {1}}最终将全部隐藏。

尝试像这样更新您的代码:

ourMessageBackground

此外,由于在后台进行化身获取,因此在检索数据时单元可能已更改。因此,您必须确保该单元格仍然显示。并且您应该缓存化身,以避免每次都获取它。