高度等于Swift中CustomCell的最大高度的CollectionView

时间:2019-05-30 03:32:57

标签: ios dynamic height collectionview

我正在尝试使用一些高度的集合视图(水平/垂直)。在其中,我有带有许多子视图的自定义单元格(例如:图像,标题,描述,最后更新等)。

现在,我希望所有单元格保持相同的高度,这是所有单元格的最大高度(基于数据)。 (每个像元高度=具有最大高度的像元)

我能够创建动态高度单元,但不知道将最大高度逻辑放在哪里。

当前我有以下代码

ViewController

lazy var flowLayout: UICollectionViewFlowLayout = {
    let layout = UICollectionViewFlowLayout()
    layout.scrollDirection = .horizontal // .vertical
    layout.minimumInteritemSpacing = 10

    return layout
}()

lazy var collectionView: UICollectionView = {
    let cv = UICollectionView(frame: .zero, collectionViewLayout: flowLayout)
    cv.backgroundColor = .white

    return cv
}()

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

    let targetWidth = collectionView.bounds
        .inset(collectionView.contentInset)
        .inset(flowLayout.sectionInset)
        .width

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellId", for: indexPath) as! SampleCell
    cell.configure(data: randomTexts[indexPath.row])

    let size = cell.systemLayoutSizeFitting(
        .init(width: targetWidth, height: 0),
        withHorizontalFittingPriority: .required, verticalFittingPriority: .fittingSizeLevel)

    return size
}

SampleCell:UICollectionViewCell

override func systemLayoutSizeFitting( _ targetSize: CGSize, withHorizontalFittingPriority horizontalFittingPriority: UILayoutPriority,
                                       verticalFittingPriority: UILayoutPriority) -> CGSize {

    let contentSize = contentView.systemLayoutSizeFitting(
        targetSize,
        withHorizontalFittingPriority: horizontalFittingPriority,
        verticalFittingPriority: verticalFittingPriority)

    return contentSize.withWidth(targetSize.width)
}

扩展名

extension CGRect {
func inset(_ insets: UIEdgeInsets) -> CGRect {
    return self.inset(by: insets)
}}

最大高度逻辑在哪里:ViewController或SampleCell以及如何实现相同的高度?

注意:还要查看如何进行水平/垂直滚动(在视图控制器内部进行一定高度的收集(并根据单元格内容对A / c进行调整))

1 个答案:

答案 0 :(得分:1)

collectionView(_:layout:sizeForItemAt:)方法内,在此处返回最大高度。