根据图像高度在集合视图自定义布局中获取单元格的高度

Posted

技术标签:

【中文标题】根据图像高度在集合视图自定义布局中获取单元格的高度【英文标题】:Get height of cell in collection view custom layout based on image height 【发布时间】:2018-04-11 07:10:15 【问题描述】:

我正在使用以下自定义布局 https://www.raywenderlich.com/164608/uicollectionview-custom-layout-tutorial-pinterest-2 从集合视图中的 url 加载图像,并使用 kingfisher 将图像加载到集合视图单元格中,如下所示

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

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "DbatCollectionViewCell",
                                                  for: indexPath) as! DbatCollectionViewCell

    cell.layer.cornerRadius = 5
    let debate = debatesArray[indexPath.row] as! NSDictionary
    let debateDetails = debate.value(forKey: "debate") as! Debate
    cell.dbatName?.text = debateDetails.title
    if let debateImageUrl = URL(string: debateDetails.image!) 
        cell.dbatImage.kf.setImage(with: debateImageUrl as Resource)
    

    return cell
  

在该教程中,单元格的高度由图像高度提供,但我想根据图像的比例给出图像大小,无论是纵向还是横向图像。为此,我必须在

中找到图像的高度
extension FavouriteCollectionViewController : DbatterLayoutDelegate 

// 1. Returns the photo height
func collectionView(_ collectionView: UICollectionView, heightForPhotoAtIndexPath indexPath:IndexPath) -> CGFloat 

    let heights = [125,150, 175,200,225,250]
    let number = heights[Int(arc4random_uniform(UInt32(heights.count)))]

    return CGFloat(number)


请告知如何操作

【问题讨论】:

你解决了吗? @Anushk 是的,我已经解决了。请参阅下面的答案 【参考方案1】:

为了实现这一点,我在上传图片的过程中上传了图片大小,包括高度和宽度,并计算了图片高度如下

func collectionView(_ collectionView: UICollectionView, heightForPhotoAtIndexPath indexPath:IndexPath) -> CGFloat 

    let debate = debatesArray[indexPath.row] as! NSDictionary
    let debateDetails = debate.value(forKey: "debate") as! Debate

    if debateDetails.image_size != nil 
        let imageDictionary = debateDetails.image_size

        let width = CGFloat((imageDictionary?.value(forKey: "width") as! NSString).floatValue)
        let height = CGFloat((imageDictionary?.value(forKey: "height") as! NSString).floatValue)

        let cellWidth = collectionView.contentSize.width / 2
        let imageheight = cellWidth * height / width

        return imageheight
    

    return 200

【讨论】:

以上是关于根据图像高度在集合视图自定义布局中获取单元格的高度的主要内容,如果未能解决你的问题,请参考以下文章

使用自定义集合视图布局快速配置动态单元格高度

具有自动布局的自定义单元格的动态高度

当单元格是可变高度时,在 cellForRowAtIndexPath 中获取单元格的高度

使自定义单元格(使用自动布局创建)高度为零

从自定义表格视图单元格类加载时如何调整单元格的高度?

设置表格视图单元格的动态高度