修改 `UITableView` 和 `UICollectionView` 的 `intrinsicContentSize` 方法可以吗?

Posted

技术标签:

【中文标题】修改 `UITableView` 和 `UICollectionView` 的 `intrinsicContentSize` 方法可以吗?【英文标题】:Is it OK to modify the `intrinsicContentSize` method for `UITableView` and `UICollectionView`? 【发布时间】:2016-04-07 08:23:05 【问题描述】:

我想将UITableViewUICollectionView 与自动布局一起使用。但是由于它们没有intrinsicContentSize 方法,因此很难为所有视图设置约束。

如果我修改它们的 intrinsicContentSize 方法以返回 contentSizeUITableViewself.collectionViewLayout.collectionViewContentSizeUICollectionView 是否可以?

【问题讨论】:

【参考方案1】:

关于intrinsicContentSize documentation 声明:

重写此方法允许自定义视图与 布局系统根据其内容想要的大小。

由于UITableViewUICollectionView 都是UIView 的子类,因此此方法也必须适用于它们。我在文档中没有看到任何关于与他们一起使用它的警告。

您还可以查看这个很棒的 tutorial,它涉及自动布局,尤其是内在内容大小。请注意以下几点:

要在自定义视图中实现固有内容大小,您必须 做两件事:覆盖 intrinsicContentSize 以返回适当的 内容的大小,并在任何时候调用 invalidateIntrinsicContentSize 某些会影响内在内容大小的变化。

因此,当您的表视图重新加载数据、插入新行等时,请不要忘记调用 invalidateIntrinsicContentSizeUICollectionView 也是如此。

希望这会有所帮助。

【讨论】:

谢谢。我只是想知道为什么 UIKIT 不默认这样做是否可以接受。 Idk,也许这是因为他们不想在没有明确用户请求的情况下(通过子类化 UITableViewUICollectionView)在幕后添加为 intrinsicContentSize 生成私有约束的开销。

以上是关于修改 `UITableView` 和 `UICollectionView` 的 `intrinsicContentSize` 方法可以吗?的主要内容,如果未能解决你的问题,请参考以下文章

将标题添加到 UICollectionView,而不是 UICollectionView 的部分

CollectionView就是这么简单!

修改 `UITableView` 和 `UICollectionView` 的 `intrinsicContentSize` 方法可以吗?

如何正确修改 UITableView 数据源数组

Swift:UITableViewController - 修改 UITableView 和 View Controller 之间的边距

像弹出警报视图时一样暗淡的背景