如何动态改变UICollectionView的高度以适应内容大小

How to dynamically change the height of UICollectionView to adapt to content size

我在同一个视图中有两个集合视图,我想降低它们的高度,以便它们适应内容大小。但是,高度只能减少而不能增加超过情节提要中设置的初始值。我怎样才能做到这一点?

到目前为止,我每次添加新数据时都尝试从高度约束出口更改 collectionView 高度,但我没有得到正确的结果。 我试着用这段代码改变它:

self.deadlineCollectionViewHeight.constant = deadlinesCollectionView.collectionViewLayout.collectionViewContentSize.height

添加高度限制出口,然后根据需要设置。

collectionViewheightConstraint.constant = modifierCollectionView.contentSize.height + 4

您在什么时候尝试读取 collectionViewContentSize 值?

如果您在 reloadData() 调用之后立即执行此操作 - 这可能不会为您提供准确的结果,因为这些调用被推迟到主线程上的某个时间点执行。执行 reloadData() 调用后内容大小不会立即改变。

尝试以下操作:

  1. 像这样在 class 中声明一个变量。
private var contentSizeObservation: NSKeyValueObservation?
  1. 开始观察 contentSize 的变化。
contentSizeObservation = deadlinesCollectionView.observe(\.contentSize, options: .new, changeHandler: { [weak self] (cv, _) in
    guard let self = self else { return }
    self.deadlineCollectionViewHeight.constant = cv.collectionViewLayout.collectionViewContentSize.height
})
  1. 不要忘记在 deinit 调用 -
  2. 中清理它
deinit {
    contentSizeObservation?.invalidate()
}

这种方法将确保您的 collectionView 的高度始终与其内容一样大。