UICollectionView 作为子视图不会更新约束

Posted

技术标签:

【中文标题】UICollectionView 作为子视图不会更新约束【英文标题】:UICollectionView as a subview doesn't update constraints 【发布时间】:2015-07-07 15:00:26 【问题描述】:

我有一个自动布局谜题。这是描述:

我有一个UITableViewCell,它有一个“容器视图”,它是一个基本的UIView,然后UICollectionView 是这个容器视图的一个子视图。

UITableViewCell -> UIView -> UICollectionView

它比最终目标稍微简化了一点,在 tableViewCell 下包含更多视图,但为了这个问题,它应该足够好。

UIViewUICollectionView 都具有以下格式的约束:

H:|[view]| and V:|[view]|(例如,获取 tableViewCell 的完整大小)。

由于某些原因,在 UICollectionView 布置其单元格后,约束没有更新。

以下是有效的:

    如果我将 UICollectionView 替换为 UILabel,那么它可以正常工作(例如,tableViewCell 会根据标签文本适当地动态调整大小)。

    如果我从拼图中删除中间 UIView(容器视图),那么一切正常(例如,tableViewCell 根据 UICollectionView 中的单元格数量适当地动态调整大小)。

什么不起作用当我将 UICollectionView 添加到这样的中间视图时:UITableViewCell -> UIView -> UICollectionView

任何想法如何解决这个问题?

【问题讨论】:

【参考方案1】:

Apple 不建议将 uitableview 中的其他可滚动对象用作子视图。

为了实现你的目标:

    为您的 UICollectionView 添加 equalWidth 约束(到 uitableviewcell) 为您的 UICollectionView 添加 equalHeight 常量(到 uitableviewcell)

【讨论】:

在 UITableViewCell 中直接添加 UICollectionView 可以正常工作。当我将一个中间 UIView 添加到视图层次结构中时,一切都会中断。 您是否尝试将 uicollectionview 的高度/宽度约束添加到中间视图? 是的.. 作为现在的解决方法,我正在根据要显示的内容计算集合视图中的行数。有了行数和默认单元格高度,我可以通过约束以编程方式设置集合视图的高度。

以上是关于UICollectionView 作为子视图不会更新约束的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionViewCell 中的 UIButton 子视图不更改控件状态

框架没有正确更新 UICollectionView 作为 UITableViewCell 子视图

添加 UICollectionView 作为 UICollectionReusableView reloadData 的子视图不起作用,我想念啥?

具有 UIView 作为子视图的 UICollectionView 的选择性手势识别

UICollectionView的选择性手势识别,UIView为子视图

以编程方式使用自动布局将子视图添加到 UICollectionView 不起作用