UITableView 单元内的 UICollectionViewCell 和自动布局
Posted
技术标签:
【中文标题】UITableView 单元内的 UICollectionViewCell 和自动布局【英文标题】:UICollectionViewCell inside UITableView Cell and Auto Layout 【发布时间】:2015-05-19 12:02:58 【问题描述】:我在UITableViewCell
中有一个UICollectionView
,但我有一些关于自动布局的问题。
这就是我的观点的层次结构。
UITableViewCell
|
-------ContentView
|
-------MyView
|
|-----UICollectionViewCell
到这里为止,所有视图都固定在他的超级视图中。例如:尾随空格=0,前导空格=0,顶部空格=0,底部空格0。
myUICollectionViewCell
的高度是动态的,基于我使用UICollectionViewLayout
绘制的元素数。所以它有一个 >= 100 的高度限制。
在项目到位后,我调用一位代表来更新高度限制,因此 myUITableView
能够计算出UITableViewCell
的正确高度。
即使这工作正常,有时我也会收到上面的自动布局错误。
我怎样才能避免这种情况?
【问题讨论】:
通过阅读控制台,您似乎在 UITableViewCell 中有一个 UICollectionView(不是 UICollectionViewCell)。首先,您应该避免滚动视图嵌套。如果一切正常,并且您想摆脱控制台警告,请按照控制台的建议进行操作,只需删除 height>=100 的约束。 你是对的,它是一个 UICollectionView。我知道这不是一个好方法,但这是我现在所拥有的。问题是,如果我删除该约束, UITableViewCell 将无法正确计算单元格的高度(顺便说一下,我不太擅长自动布局) 尝试设置高度 >= 100 表示高度 >=10。如果有效,请记住根本不安全。 【参考方案1】:单元格的 contentView 具有固定高度 (44)。这会导致情节提要和自动布局的派生高度之间偶尔发生冲突。
自行调整大小是最好的选择。您要做的是让您的“集合视图”确定其固有大小,以便自动布局可以自动为您处理可变的单元格高度。
查看smileyborg 在他的answer 中的详细演练,以在 UITableView 中使用自动布局进行动态单元格布局和可变行高。
他使用标签,但原理是一样的。单元格要求其 contentView 自行布置。 contentView 要求标签自行布置。标签决定了它的高度。自动布局根据标签的约束确定 contentView 的高度,而单元格根据 contentView 的高度确定其高度。 关键是标签没有高度限制,您的“收藏视图”也不再需要。
一旦您采用自调整大小,它就消除了很多代码(和大小限制),因为容器管理它们的大小,而限制只处理间距。
【讨论】:
以上是关于UITableView 单元内的 UICollectionViewCell 和自动布局的主要内容,如果未能解决你的问题,请参考以下文章
UITableView 内的 CollectionView 单元格重复
自定义单元格 - UITableVIew 内的 UICollectionView
UITableView 单元内的 UICollectionViewCell 和自动布局
带有自定义单元格的 ViewController 内的 UITableView 没有情节提要