Ios 图片和标签在滚动时不断加载

Ios images and labels keep loading while scrolling

我正在编写一个演示来显示用户的推文。

问题是: 每次我滚动到底部然后再滚动回来时,推文的图片和评论都会重新加载,甚至样式也变得一团糟。我知道它与 dequeue 有关,每次出队后我都将图像(这是 UIImageView 的数组)设置为 [],但它不起作用。我很困惑,无法入睡....

这是我的 TableCell(属性 和图像集)的核心代码,提供布局:

class WechatMomentListCell: UITableViewCell{
    
    static let identifier = "WechatMomentListCell"
    
    var content = UILabel()
    var senderAvatar = UIImageView()
    var senderNick = UILabel()
    var images = [UIImageView()]
    var comments = [UILabel()]


  override func layoutSubviews() {
//there is part of Image set and comments
        if images.count != 0 {
            switch images.count{
            case 1:
                contentView.addSubview(images[0])
                images[0].snp.makeConstraints{ (make) in
                    make.leading.equalTo(senderNick.snp.leading)
                    make.top.equalTo(content.snp.bottom)
                    make.width.equalTo(180)
                    make.height.equalTo(180)
                }
            default:
                for index in 0...images.count-1 {
                    contentView.addSubview(images[index])
                    images[index].snp.makeConstraints{ (make) in
                        make.leading.equalTo(senderNick.snp.leading).inset(((index-1)%3)*109)
                        make.top.equalTo(content.snp.bottom).offset(((index-1)/3)*109)
                        make.width.equalTo(90)
                        make.height.equalTo(90)
                    }
                }
            }
        }
        if comments.count != 0, comments.count != 1 {
            for index in 1...comments.count-1 {
                comments[index].backgroundColor = UIColor.gray
                contentView.addSubview(comments[index])
                comments[index].snp.makeConstraints{(make) in
                    make.leading.equalTo(senderNick)
                    make.bottom.equalToSuperview().inset(index*20)
                    make.width.equalTo(318)
                    make.height.equalTo(20)
                }
            }
        }
    }

这是我的ViewController,提供数据源

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        guard let tweetCell = tableView.dequeueReusableCell(withIdentifier: WechatMomentListCell.identifier, for: indexPath) as? WechatMomentListCell else {
            fatalError("there is no WechatMomentList")
        }
        
        let tweet = viewModel.tweetList?[indexPath.row]
        for i in tweet?.images ?? [] {
            let flagImage = UIImageView()
            flagImage.sd_setImage(with: URL(string: i.url))
            tweetCell.images.append(flagImage)
        }

        for i in tweet?.comments ?? [] {
            let flagComment = UILabel()
            flagComment.text = "\(i.sender.nick) : \(i.content)"
            tweetCell.comments.append(flagComment)
        }
        return tweetCell
    }

图像 GET 请求已使用 Alamofire 在 ViewModel 中定义。

第一次是正确的。但是,如果我滚动屏幕,评论将再次加载并且图像会像这样乱七八糟。

我在您的表格视图单元格中发现了问题。在单元格中,您有两个这样的变量。

var images = [UIImageView()]
var comments = [UILabel()]

每次您使用此单元格时,图像和评论都会被附加。确保每次使用此单元格时都重置这些数组。比如在初始化时将主题设置为空。