CollectionView с высотой, равной максимальной высоте CustomCell в Swift - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь получить коллекционный вид (горизонтальный / вертикальный) с некоторой высотой. Внутри этого у меня есть пользовательские ячейки со многими подпредставлениями (например: изображение, заголовок, описание, последнее обновление и т. Д.).

Теперь я хочу, чтобы все ячейки поддерживали одинаковую высоту, которая является максимальной высотой всех ячеек (на основе данных). (Высота каждой ячейки = ячейка с максимальной высотой)

Я могу создать ячейку динамической высоты, но не могу понять, куда поместить логику максимальной высоты.

В настоящее время у меня есть следующий код

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 и как этого добиться?

Примечание. Также рассмотрим, как это сделать для горизонтальной / вертикальной прокрутки (сбор с некоторой высотой (и отрегулируйте / c в соответствии с содержимым ячейки) внутри контроллера вида)

1 Ответ

1 голос
/ 30 мая 2019

В методе collectionView(_:layout:sizeForItemAt:) верните максимальную высоту здесь.

...