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