UITableViewCell 内的 UICollectionView:每个的“reloadData”顺序?

Posted

技术标签:

【中文标题】UITableViewCell 内的 UICollectionView:每个的“reloadData”顺序?【英文标题】:UICollectionView inside UITableViewCell: order of `reloadData` for each? 【发布时间】:2017-05-11 05:25:09 【问题描述】:

我在UITableViewCell 中有一个UICollectionView,限制是集合视图适合单元格的边界。

根据一些外部数据(定期刷新),我创建了不同的集合视图单元格(大小),它们具有不同的高度。

当我得到外部数据时,我按顺序重新加载集合视图和表格视图:

    为外部数据的新单元格重新加载集合视图 为该特定行重新加载新高度的表格视图

问题是,如果说我得到了一些需要smallcollection view cell的数据,table view cell的高度会是small,那么如果有新数据进来这需要大集合视图单元格,在第 1 步,集合视图仍为 small 大小,但其中的单元格将是 large,然后我收到以下警告:

项目高度必须小于 UICollectionView 的高度减去部分插入顶部和底部值,减去内容插入顶部和底部值。

如果我得到大单元的数据,然后是小单元的新数据,它工作正常。

那么正确的做法应该是什么?

谢谢!

【问题讨论】:

@iphonic OP 在 UITableViewCell 中有一个 UICollectionView,而不是相反。 当您需要重新加载具有不同单元格大小的集合视图时,更新 UI 的顺序应该是 1。没有自动布局 - 表视图“重新加载行”,行索引具有要更新并返回的集合视图相应的行高 - 重新加载集合视图。 2. 使用自动布局: - 更新集合视图高度约束 - 重新加载集合视图 【参考方案1】:

你在 viewDidLoad 上设置了吗?

tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = CGFloat(60.0) //your best height estimate

【讨论】:

我实际上想过这个,但是自动大小需要表格单元格的内容(即我的情况下的集合视图)具有固有的内容大小,但集合视图(即滚动视图)关于内在内容大小有一种奇怪的行为。 否则您可以将高度存储在属性中并调用:tableView.beginUpdates()tableView.endUpdates()。这将在不重新加载数据的情况下触发高度变化。 谢谢@pesch 让我试试

以上是关于UITableViewCell 内的 UICollectionView:每个的“reloadData”顺序?的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell 内的 UIImageView

UITableViewCell 内的多个堆栈视图内的多行标签

UITableViewCell 内的 UIView 上的 UIGestureRecognizer

UITableViewCell 内的 UIStackView

如何增加 UItableviewcell 内的 UItableview 高度?

捏放大到 UITableViewCell 内的 UIImageView