【发布时间】:2018-05-25 03:39:48
【问题描述】:
我有一个 UITableViewCell 显示图像或文本。我已将 UIImageView 的高度和宽度设置为
现在我的问题是,加载后单元格不显示图像,用户需要返回并再次查看此屏幕才能看到图像。我该如何解决?
图片加载前:
图片加载成功后:
如你所见,它没有显示,只是视图被扩展了
如果用户按下 BACK 并再次出现在此视图中,
图像现在显示。
我应该如何解决这个问题?因为我无法在 tableviewcell 中写 tableview.reloaddata()。
为我的 tableviewcell 中的代码配置我的单元格:
func configCell(message: Message) {
self.message = message
if message.fromId == currentUser {
sentView.isHidden = false
sentMsgLabel.text = message.textMessages
receivedMsgLabel.text = ""
receivedView.isHidden = true
timeReceived.text = ""
timeSent.text = message.timestamp
youLabel.text = "You"
themLabel.text = ""
if let ImageUrl = message.imageUrlLink {
self.receivedimg.loadImageUsingCacheWithUrlString(ImageUrl)
}
}
else {
sentView.isHidden = true
sentMsgLabel.text = ""
receivedMsgLabel.text = message.textMessages
receivedMsgLabel.isHidden = false
timeReceived.text = message.timestamp
timeSent.text = ""
// setting name for receipient
Database.database().reference().child("users").child(message.fromId!).child("name").observe(.value) { (datasnapshot) in
if let name = datasnapshot.value as? String {
self.themLabel.text = name
}
}
youLabel.text = ""
}
}
对于我的 loadImageUsingCacheWithUrlString 代码,扩展名如下:
let imageCache = NSCache<AnyObject, AnyObject>()
extension UIImageView {
func loadImageUsingCacheWithUrlString(_ urlString: String) {
self.image = nil
//check cache for image first
if let cachedImage = imageCache.object(forKey: urlString as AnyObject) as? UIImage {
self.image = cachedImage
return
}
//otherwise fire off a new download
let url = URL(string: urlString)
URLSession.shared.dataTask(with: url!, completionHandler: { (data, response, error) in
//download hit an error so lets return out
if error != nil {
print(error ?? "")
return
}
DispatchQueue.main.async(execute: {
if let downloadedImage = UIImage(data: data!) {
imageCache.setObject(downloadedImage, forKey: urlString as AnyObject)
self.image = downloadedImage
}
})
}).resume()
}
}
【问题讨论】:
-
提供你的代码,让我们看看你如何在图像加载后更新 ImageView
-
是
loadImageUsingCacheWithUrlString自定义函数吗? -
是的,它是一个将我的图像保存为缓存的功能,因此用户每次打开视图时都不需要加载它
-
但它会在第一次调用时下载实际图像吗?
-
是的,它会下载。我的图片已下载,但它不会自动显示,除非我点击返回,然后返回视图
标签: ios swift firebase uicollectionviewcell firebase-storage