【问题标题】:How do you implement a dynamically sized UICollectionView inside of a UITableViewCell?如何在 UITableViewCell 中实现动态大小的 UICollectionView?
【发布时间】:2019-12-22 08:11:51
【问题描述】:

我们在UITableViewCell 中有一个UICollectionViewUITableViewCell 有一个垂直的stackView,顶部有一个UIView,底部有一个collectionView

根据我们找到的其他一些答案,我们将UICollectionView 子类化:

class DynamicCollectionView: UICollectionView {
override func reloadData() {
    super.reloadData()
    invalidateIntrinsicContentSize()
}

override var intrinsicContentSize: CGSize {
    return collectionViewLayout.collectionViewContentSize
}

作为概念证明,在 tableView 中,我们设置了 tableViewCell.collectionViewCellCount = indexPath.row

我们在tableViewCellcollectionViewCellCount 上有一个观察员:

    var collectionViewCellCount = 0 {
    didSet {
        collectionView.reloadData()
    }
}

collectionView 的子类方法上设置时,所有断点都会运行。

再次,为了概念验证,我们将collectionViewCell 的大小设置如下:

        if let layout = imageCollectionView.collectionViewLayout as? UICollectionViewFlowLayout {
        layout.itemSize = CGSize(width: 60, height: 60)

collectionView 从未明确指定高度。

我们的问题是:

单元格仅在滚动时正确调整大小。最初,collectionView 未显示在 stackView 中。

我们正在制作一些屏幕截图和 gif 图像,但想提出问题。

很高兴尽我们所能澄清更多!

更新:

问题似乎正在发生,因为collectionView 没有明确的高度限制。 cellForItemAt... 仅在存在显式高度约束或滚动时才会调用。但是,添加显式高度约束不会被内容大小覆盖。

【问题讨论】:

  • 如果我做对了,你想在 tableView 单元格中显示完整的 collectionView 内容吗?我认为您可以调整表格单元格的大小。
  • 帮助我了解您的情况。请
  • @JayrajVala 是的,你说得对,我想在 tableViewCell 中显示完整的 collectionView 内容。我还能如何澄清?
  • 也许你可以看看这个答案:stackoverflow.com/questions/55000840/…
  • @ArielSD 然后你可以计算表格单元格的大小。 (表格单元格内集合的顶部 + 底部填充 +(集合单元格大小 * 集合行数))。

标签: ios swift uitableview uicollectionview autolayout


【解决方案1】:

您是否知道 UICollectionView 中的 reloadData 被调用(听起来像,如果该断点被击中)?如果它只在滚动时大小合适,我猜它与可重复使用的单元格有关。

如果您尝试通过向所有集合单元发送需求更新来强制单元重新显示怎么办?由于 reloadData,我认为这不是必需的,但也许在你的 reloadData 之后这样的事情可以帮助你缩小正在发生的事情:

        for cell in collectionView.visibleCells {
                 cell.setNeedsDisplay()
        }

【讨论】:

  • 这是一个有趣的想法......不幸的是,它没有奏效。似乎它确实与在重用一个最初没有被调用的单元格时被调用的东西有关。
猜你喜欢
  • 1970-01-01
  • 2017-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-18
  • 1970-01-01
相关资源
最近更新 更多