我正在使用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
}
}
答案 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()
释放计时器。