Я пытаюсь получить коллекционный вид (горизонтальный / вертикальный) с некоторой высотой. Внутри этого у меня есть пользовательские ячейки со многими подпредставлениями (например: изображение, заголовок, описание, последнее обновление и т. Д.).
Теперь я хочу, чтобы все ячейки поддерживали одинаковую высоту, которая является максимальной высотой всех ячеек (на основе данных). (Высота каждой ячейки = ячейка с максимальной высотой)
Я могу создать ячейку динамической высоты, но не могу понять, куда поместить логику максимальной высоты.
В настоящее время у меня есть следующий код
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 в соответствии с содержимым ячейки) внутри контроллера вида)