我正在尝试使用一些高度的集合视图(水平/垂直)。在其中,我有带有许多子视图的自定义单元格(例如:图像,标题,描述,最后更新等)。
现在,我希望所有单元格保持相同的高度,这是所有单元格的最大高度(基于数据)。 (每个像元高度=具有最大高度的像元)
我能够创建动态高度单元,但不知道将最大高度逻辑放在哪里。
当前我有以下代码
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进行调整))
答案 0 :(得分:1)
在collectionView(_:layout:sizeForItemAt:)
方法内,在此处返回最大高度。