在这种情况下,图像正在下载并显示到collectionview
中,并且工作正常,但是图像以不同的方式显示。我已经显示了所有图像,它们都具有相同的高度和宽度。如果图像较小,则它将采用默认的图像高度和宽度。我已经显示所有图像都正确显示了相同的高度和宽度。
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!
}
如何设置所有图像的大小相同
答案 0 :(得分:2)
image
的大小不在您手中。它是从API接收到的。因此,最好使用将contentMode
设置为scaleAspectFit
的正确分辨率的图像,而不是对其进行拉伸。
如果仍要在显示器中显示相同大小,请尝试将imageView的contentMode更改为scaleAspectFill
或scaleToFill
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);
}
}
}
});
。