当我滚动UITableView时,图像消失

时间:2017-10-06 13:45:12

标签: ios swift uitableview

我正在使用UITableView来显示我的数据。

我的数据包含图片和文字。问题是当我滚动UITableView图像消失时。

这是我的代码:

func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return msgs.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! collCell
    let msg = msgs[indexPath.row]
    var decodeImgURL = ""
    cell.lbl1.text = msg.content

    decodeImgURL = msg.imgurl

    if decodeImgURL == "none" {
        cell.img.isHidden = true
    } else {

        let dataDecoded : Data = Data(base64Encoded:decodeImgURL,options: .ignoreUnknownCharacters)!
        let decodedImage = UIImage(data: dataDecoded)
        cell.img.image = decodedImage

    }

    return cell
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

    let msg = msgs[indexPath.row]

    if msg.imgurl == "none" {
        return 64
    } else {
        return 207
    }

}

2 个答案:

答案 0 :(得分:0)

使用UITableView,内存中唯一的单元格是可见单元格。当您从屏幕上滚动表格单元格时,它将从内存中删除。这有助于表格视图滚动更快。您面临的问题是,当您将表格单元格从屏幕滚动时,单元格(以及图像)将从内存中释放。将单元格滚动回屏幕时,它会再次分配到内存中。我认为你的问题可能来自两个问题之一:

1)您只需等待几秒钟即可在单元格中重新创建图像。

2)您的msgs数组可能存在问题。如果几秒钟后图像没有出现,请尝试在此行后面添加一个断点:cell.img.image = decodedImage。如果在屏幕上滚动单元格后未达到该断点,则返回到屏幕,然后问题是decodeImgURL(图像的网址)不正确。

答案 1 :(得分:0)

奇怪,因为还没有针对 Swift5

的解决方案

最简单的选择是每隔一段时间(比如说1秒钟)更新一次图片

    Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { timer in

        self.pictureImageView?.image = your_image
    }

然后使用timer.invalidate()方法中的viewDidDisappear()释放计时器。