IOS设置单元格高度取决于网址图像高度宽度比

时间:2016-06-21 11:43:28

标签: ios xcode swift

我想显示一个流动的Items列表。项目图像的宽度应该是屏幕的宽度,高度应该是图像不会拉伸或缩小。

项目图片下方应该是项目的名称和拥有该项目的用户的用户名。

我完成了大部分工作。唯一的问题是collectionView卡的高度设置(非动态)。因此,图像通常要么溢出卡片,要么没有填满所有卡片的高度,并且有空格。

是否可以通过某种方式更改卡的高度以取决于图像的高度?

这是我的itemCellView,名为" CollViewCell":

import UIKit
import AlamofireImage

class CollViewCell: UICollectionViewCell {

    @IBOutlet weak var imgCell: UIImageView!
    @IBOutlet weak var labelCell: UILabel!
    @IBOutlet weak var labelUserNameCell: UILabel!
}

以下是与Collection

有关的Viewcontroller代码
...
@IBOutlet weak var collectionView: UICollectionView!

override func viewDidLoad() {
    super.viewDidLoad()
    self.viewModel.getItems(self.viewModel.getCurrentUser()) { items in
        self.collectionView.reloadData()

    }
}

...

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

    let cell: CollViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! CollViewCell
    cell.labelCell.text = self.viewModel.tableDict[indexPath.row]![0]
    let imageUrl = NSURL(string: self.viewModel.tableDict[indexPath.row]![1])
    cell.imgCell.af_setImageWithURL(imageUrl!, placeholderImage: nil, filter: nil, imageTransition: .CrossDissolve(0.2))
    cell.labelUserNameCell.text = self.viewModel.tableDict[indexPath.row]![2]

    return cell
}
...

故事板上的ViewMode设置为Aspect Fill,语义从左到右

1 个答案:

答案 0 :(得分:0)

只要您能够计算图像高度,就可以尝试使用estimatedItemSize UICollectionViewFlowLayout及其委托函数collectionView:layout:sizeForItemAtIndexPath:的组合。

告诉您的集合视图使用流布局并返回estimatedItemSize的平均单元格大小。然后,在collectionView:layout:sizeForItemAtIndexPath:中,您将使用计算的图像大小来确定集合视图项的实际大小。内部的UIImageView应该利用autolayout来填补增加的大小。