问题描述
我在同一个视图中有两个集合视图,我想降低它们的高度,以便它们适应内容大小。但是,高度应该只减少而不是增加超过故事板中设置的初始值。我怎样才能做到这一点?
到目前为止,我已经尝试在每次添加新数据时从 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