修改 `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 【问题描述】:我想将UITableView
和UICollectionView
与自动布局一起使用。但是由于它们没有intrinsicContentSize
方法,因此很难为所有视图设置约束。
如果我修改它们的 intrinsicContentSize
方法以返回 contentSize
为 UITableView
和 self.collectionViewLayout.collectionViewContentSize
为 UICollectionView
是否可以?
【问题讨论】:
【参考方案1】:关于intrinsicContentSize
documentation 声明:
重写此方法允许自定义视图与 布局系统根据其内容想要的大小。
由于UITableView
和UICollectionView
都是UIView
的子类,因此此方法也必须适用于它们。我在文档中没有看到任何关于与他们一起使用它的警告。
您还可以查看这个很棒的 tutorial,它涉及自动布局,尤其是内在内容大小。请注意以下几点:
要在自定义视图中实现固有内容大小,您必须 做两件事:覆盖 intrinsicContentSize 以返回适当的 内容的大小,并在任何时候调用 invalidateIntrinsicContentSize 某些会影响内在内容大小的变化。
因此,当您的表视图重新加载数据、插入新行等时,请不要忘记调用 invalidateIntrinsicContentSize
。UICollectionView
也是如此。
希望这会有所帮助。
【讨论】:
谢谢。我只是想知道为什么 UIKIT 不默认这样做是否可以接受。 Idk,也许这是因为他们不想在没有明确用户请求的情况下(通过子类化UITableView
或 UICollectionView
)在幕后添加为 intrinsicContentSize
生成私有约束的开销。 以上是关于修改 `UITableView` 和 `UICollectionView` 的 `intrinsicContentSize` 方法可以吗?的主要内容,如果未能解决你的问题,请参考以下文章
将标题添加到 UICollectionView,而不是 UICollectionView 的部分
修改 `UITableView` 和 `UICollectionView` 的 `intrinsicContentSize` 方法可以吗?
Swift:UITableViewController - 修改 UITableView 和 View Controller 之间的边距