![](/img/trans.png)
[英]UICollectionViewCell Reuse with Asynchronous Image Loading wrong image
[英]Asynchronous loading of image in UICollectionViewCell causes labels to disappear
我正在開發一個照相館應用程序,該應用程序基本上由一個導航控制器組成,在該控制器上加載了集合視圖的實例。 每個集合視圖單元格都包含一個UIImageView和一個用於圖像名稱的標簽。 單元異步加載圖像。
第一次加載每個收藏夾視圖時,這一切都很好,但是如果您退回到上一個收藏夾視圖並再次轉發,則標簽會消失。
我認為這與異步加載圖像有關,就像我刪除圖像加載一樣,標簽很好,文本正確並且不會消失。
我不確定圖像加載哪里出問題了...
各個組件是:
使用以下擴展方法加載圖像:
extension UIImageView {
public func imageFromServerURL(url: URL) {
if ImageData.realPhotoCache.keys.contains(url.absoluteString){
self.image = ImageData.realPhotoCache[url.absoluteString];
}else{
URLSession.shared.dataTask(with: url, completionHandler: { (data, response, error) -> Void in
if error != nil {
print(error)
return
}
DispatchQueue.main.async(execute: { () -> Void in
let image = UIImage(data: data!)
ImageData.realPhotoCache[url.absoluteString] = image;
self.image = image
})
}).resume()
}
}}
集合視圖的單元格如下所示:
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
var cell: UICollectionViewCell;
cell = collectionView.dequeueReusableCell(withReuseIdentifier: photoCellReuseIdentifier, for: indexPath);
let imageProvider = self.imageProviderForIndexPath(indexPath: indexPath);
(cell as! tsPhotoCollectionViewCell).photoView.imageFromServerURL(url: imageProvider.GetThumbImageUrl());
(cell as! tsPhotoCollectionViewCell).titleLabel.text = imageProvider.GetImageTitle()!;
return cell
}
返回時將集合視圖重置為:
func reset(){
photoProviders = [ImageDataProvider]();
self.collectionView?.reloadSections(IndexSet(integer: 0))
startLoad()
}
override func viewWillAppear(_ animated: Bool) {
if(hasNavigatedAway){
hasNavigatedAway = false;
self.reset();
}
}
收集的第一個負載通常很好(單元格為綠色,標簽為紅色):
但是,隨着時間的流逝並返回到集合視圖,標簽消失了:
標簽有時也會隨滾動而變化。 我已經嘗試了所有我能想到的,但是沒有任何運氣。
從您的屏幕截圖來看,似乎UILabel通過擴展的UIImageViews將其高度壓縮為0。 嘗試將UILabel的垂直內容壓縮優先級提高到1000,以使其不可壓縮(然后使自動布局引擎壓縮UIImageView或間距-取決於您的約束)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.