如何解决如何动态改变 UICollectionView 的高度以适应内容大小
我在同一个视图中有两个集合视图,我想降低它们的高度,以便它们适应内容大小。但是,高度应该只减少而不是增加超过故事板中设置的初始值。我怎样才能做到这一点?
到目前为止,我已经尝试在每次添加新数据时从 height cotraint 出口更改 collectionView 高度,但我没有得到正确的结果。 我试着用这个代码改变它:
self.deadlineCollectionViewHeight.constant = deadlinesCollectionView.collectionViewLayout.collectionViewContentSize.height
解决方法
您在什么时候尝试读取 collectionViewContentSize
值?
如果您在 reloadData()
调用后立即执行此操作 - 这可能无法为您提供准确的结果,因为这些调用被推迟到主线程上的某个时间点执行。执行 reloadData()
调用后,内容大小不会立即更改。
尝试以下操作:
- 像这样在类中声明一个变量。
private var contentSizeObservation: NSKeyValueObservation?
- 开始观察 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
})
- 不要忘记在
deinit
调用中清理它 -
deinit {
contentSizeObservation?.invalidate()
}
这种方法将确保您的 collectionView 的高度始终与其内容一样大。
,添加高度约束出口,然后根据需要进行设置。
collectionViewheightConstraint.constant = modifierCollectionView.contentSize.height + 4
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。