基于动态集合视图的 UITableView 的动态高度

vis*_*aka 3 uitableview ios uicollectionview swift

我必须UICollectionView在 a 内添加一个UITableViewCell. 它们collectionView可以有不同数量的项目。所以collectionView应该在里面适当调整tableView

我已经在我的项目中实现了这个: https ://github.com/vishalwaka/DynamicCollectionViewInsideTableViewCell

collectionView就我而言,设置单元格的高度后不会调整单元格的高度。

如何设置collectionView不可滚动并显示tableviewcell.

nik*_*dia 7

创建一个具有前导、尾随、顶部、底部、高度约束的collectionView内部UITableViewCell,如下所示:

在此输入图像描述

现在,在您的tableViewCell类中创建一个NSKeyValueObserver并将其添加到 的UICollectionViewcontentSize属性上,并将 contentSize 更改分配给 collectionView 的高度约束。

class FormCollectionTableViewCell: UITableViewCell{

  var collectionViewObserver: NSKeyValueObservation?

  override func awakeFromNib() {
    super.awakeFromNib()
    addObserver()
  }

  override func layoutSubviews() {
        super.layoutSubviews()
        layoutIfNeeded()
  }

  func addObserver() {
       collectionViewObserver = collectionView.observe(\.contentSize, changeHandler: { [weak self] (collectionView, change) in
            self?.collectionView.invalidateIntrinsicContentSize()
            self?.collectionViewHrightConstarint.constant = collectionView.contentSize.height
            self?.layoutIfNeeded()
        })
    }
   deinit {
      collectionViewObserver = nil
   }
}
Run Code Online (Sandbox Code Playgroud)

在你的 viewController 类中使用以下代码:

override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        tableView.reloadData()
}
Run Code Online (Sandbox Code Playgroud)

现在,您的表视图将具有具有动态高度的集合视图。不要忘记禁用滚动UICollectionView并调整其流程。