UITableView/UICollectionView的Cell高度自适应展开

一、UITableView

  1. 需要在自定义UITableView的时候,提出预设高度。
    tableView.estimatedRowHeight = 100
  2. 不需要实现
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat

3.在UITableViewCell中,对contentView进行约束。

/// 绑定数据
override func bindDataModel(_ model: Any!) {
    super.bindDataModel(model)
    YourView.bindDataModel(model)
    
    //绑定数据后,再撑开Cell高度
    contentView.mas_makeConstraints { make in
        make?.top.equalTo()(0)
        make?.left.equalTo()(0)
        make?.right.equalTo()(0)
        make?.bottom.equalTo()(0)//在iOS 14系统下的某些机型会出现高度设置了,但是为0的情况,加上这句话,可解决问题
        make?.height.equalTo()(SCREEN_WIDTH*220/375)
    }
}

二、UICollectionView

  1. 在UICollectionView的UICollectionViewFlowLayout中,预设Item大小
let layout = UICollectionViewFlowLayout.init()
layout.estimatedItemSize = .init(width: 100, height: 100)
let contentCollectionView = UICollectionView.init(frame: .init(x: 0, y: 0, width: self.frame.width, height: self.frame.height), collectionViewLayout: layout)
  1. 在UICollectionViewCell中重写preferredLayoutAttributesFittingAttributes
override func preferredLayoutAttributesFitting(_ layoutAttributes: override func preferredLayoutAttributesFitting(_ layoutAttributes: UICollectionViewLayoutAttributes) -> UICollectionViewLayoutAttributes {
    let attr = super.preferredLayoutAttributesFitting(layoutAttributes)
    attr.frame = .init(x: 0, y: 0, width: self.frame.width, height: 90)
    return attr
}

这样就可以在UICollectionViewCell中定义自己的高度了

你可能感兴趣的:(UITableView/UICollectionView的Cell高度自适应展开)