簡體   English   中英

UICollectionViewCell中圖像的異步加載導致標簽消失

[英]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();
    }
}

收集的第一個負載通常很好(單元格為綠色,標簽為紅色):

https://imgur.com/g3p03yF

但是,隨着時間的流逝並返回到集合視圖,標簽消失了:

https://imgur.com/If2FQZS

標簽有時也會隨滾動而變化。 我已經嘗試了所有我能想到的,但是沒有任何運氣。

從您的屏幕截圖來看,似乎UILabel通過擴展的UIImageViews將其高度壓縮為0。 嘗試將UILabel的垂直內容壓縮優先級提高到1000,以使其不可壓縮(然后使自動布局引擎壓縮UIImageView或間距-取決於您的約束)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM