collectionView图片:在Swift中动态更改高度

时间:2019-05-21 11:38:53

标签: ios swift uitableview

在这种情况下,图像正在下载并显示到collectionview中,并且工作正常,但是图像以不同的方式显示。我已经显示了所有图像,它们都具有相同的高度和宽度。如果图像较小,则它将采用默认的图像高度和宽度。我已经显示所有图像都正确显示了相同的高度和宽度。

enter image description here

   func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

   let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "storeCell", for: indexPath) as? EShoppingStoreCollectionViewCell
        cell?.layer.borderColor = UIColor.groupTableViewBackground.cgColor
        cell?.layer.borderWidth = 0.5

        let urlData = storeDictionary?[indexPath.item]["logo"] as? String
        cell?.storeImageView.contentMode = UIViewContentMode.scaleAspectFit
        cell?.storeImageView.clipsToBounds = true
        let frame = CGRect(x: (cell?.storeImageView.frame.width)!/2 - 30, y: (cell?.storeImageView.frame.height)! - 30, width: 60, height: 60)

        if urlData != nil {
            let url = URL(string: urlData!)
            cell?.storeImageView.sd_setImage(with: url!, placeholderImage: UIImage(named:""), options: [SDWebImageOptions.continueInBackground, SDWebImageOptions.lowPriority, SDWebImageOptions.refreshCached, SDWebImageOptions.handleCookies, SDWebImageOptions.retryFailed]) { (image, error, cacheType, url) in
                if error != nil {
                    print("Failed: \(String(describing: error))")
                } else {
                    print("Success")
                }
            }
        }
    return cell!
}

如何设置所有图像的大小相同

1 个答案:

答案 0 :(得分:2)

image的大小不在您手中。它是从API接收到的。因此,最好使用将contentMode设置为scaleAspectFit的正确分辨率的图像,而不是对其进行拉伸。

如果仍要在显示器中显示相同大小,请尝试将imageView的contentMode更改为scaleAspectFillscaleToFill

cell?.storeImageView.contentMode = UIViewContentMode.scaleAspectFill

这肯定会拉伸图像,但您在显示中看到的所有图像都将覆盖imageView的大小。

您还可以选择另一种方法来改善用户界面的外观-将backgroundColor中的imageView设置为contentMode,并将其scaleAspectFit设置为private static int firstVisibleInListview; firstVisibleInListview = yourLayoutManager.findFirstVisibleItemPosition(); @Override public void onScrollStateChanged(RecyclerView recyclerView,int newState){ super.onScrollStateChanged(recyclerView,newState); } @Override public void onScrolled(RecyclerView recyclerView,int dx,int dy){ super.onScrolled(recyclerView,dx,dy); int currentFirstVisible = yourLayoutManager.findFirstVisibleItemPosition(); if(currentFirstVisible > firstVisibleInListview){ image.setVisibility(View.VISIBLE); }else{ filterView.setVisibvility(View.GONE); } } } });