【问题标题】:Dynamic UICollectionView inside dynamic UITableViewCell动态 UITableViewCell 内的动态 UICollectionView
【发布时间】:2018-04-19 22:29:47
【问题描述】:

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

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

我的表格视图已正确配置为动态,因为其他单元格工作正常,因此问题不存在。

这是我目前拥有的...如您所见,下面没有集合视图

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

我已经正确配置了集合视图的所有方面的约束,因为当我给出固定高度约束时它可以工作。但这违背了动态集合视图的对象...

我已将一个插座链接到 UICollectionViewFlowLayout 并设置了一个估计的单元格大小,并在 上为该单元格提供了正确的约束标签在里面,你可以在我强制高度限制的图像中看到。

【问题讨论】:

    标签: swift uitableview dynamic uicollectionview


    【解决方案1】:

    为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
       }
    }
    
    1. 在 Interface builder 中,将 collectionView 的类更改为 DynamicCollectionView(子类 UICollectionView)。

    2. 设置 UICollectionViewFlowLayout 的估计单元格大小。

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

    【讨论】:

    • 这对我来说只是部分工作。当 tableView 首次加载时,单元格(包含 DynamicCollectionView)不会动态调整其高度。只有在滚动 tableView 并返回单元格后,它才能正确调整其高度。
    猜你喜欢
    • 2014-07-30
    • 2019-10-12
    • 1970-01-01
    • 2019-07-30
    • 2021-05-18
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多