微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

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

expected behaviour

Wrong result

解决方法

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

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

尝试以下操作:

  1. 像这样在类中声明一个变量。
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 调用中清理它 -
deinit {
    contentSizeObservation?.invalidate()
}

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

,

添加高度约束出口,然后根据需要进行设置。

collectionViewheightConstraint.constant = modifierCollectionView.contentSize.height + 4

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。