Swift 动态UITableViewCell内的动态UICollectionView

Swift 动态UITableViewCell内的动态UICollectionView,swift,uitableview,dynamic,uicollectionview,Swift,Uitableview,Dynamic,Uicollectionview,我有一个集合视图,它是动态的,可以包含任意数量的单元格。它位于表格视图单元格内 override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return UITableViewAutomaticDimension } 我的表格视图已正确配置为动态,因为其他单元格工作正常,因此不存在问题 这是我目前拥有的。。。如您所见,下面没有收藏视图 这就

我有一个集合视图,它是动态的,可以包含任意数量的单元格。它位于表格视图单元格内

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}
我的表格视图已正确配置为动态,因为其他单元格工作正常,因此不存在问题

这是我目前拥有的。。。如您所见,下面没有收藏视图

这就是我想要的结果(强制集合视图上的高度约束)

我已经在集合视图的所有侧面正确地配置了约束,因为当我给出一个固定高度约束时,约束就起作用了。但这会破坏动态集合视图的对象…


我已将一个出口链接到UICollectionViewFlowLayout,并设置了估计的单元格大小,并在标签上为单元格提供了正确的约束,正如您在我强制设置高度约束的图像中看到的那样。

为collectionView创建一个子类并覆盖intrinsicContentSize

class DynamicCollectionView: UICollectionView {
  override func layoutSubviews() {
    super.layoutSubviews()
    if !__CGSizeEqualToSize(bounds.size, self.intrinsicContentSize) {
        self.invalidateIntrinsicContentSize()
     }
  }

   override var intrinsicContentSize: CGSize {
    return collectionViewLayout.collectionViewContentSize
   }
}
  • 在Interface builder中,将collectionView的类更改为DynamicCollectionView(子类UICollectionView)

  • 设置UICollectionViewFlowLayout的估计单元格大小

        flowLayout.estimatedItemSize = CGSize(width: 1,height: 1)
    

  • 这对我来说只是部分起作用。当tableView首次加载时,单元(包含DynamicCollectionView)不会动态调整其高度。只有在滚动tableView并返回单元格后,它才能正确调整其高度。