【问题标题】:How to dynamically change the height of UICollectionView to adapt to content size如何动态改变 UICollectionView 的高度以适应内容大小
【发布时间】:2021-03-29 12:55:57
【问题描述】:

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

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

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

【问题讨论】:

  • 这可能会回答你的问题:stackoverflow.com/a/42438709/14437411
  • 您是否尝试在 self.deadlineCollectionViewHeight.constant = deadsCollectionView.collectionViewLayout.collectionViewContentSize.height 上方添加 self.view.layoutIfNeeded() ?

标签: ios swift uicollectionview autolayout


【解决方案1】:

添加高度约束插座,然后根据需要设置它。

collectionViewheightConstraint.constant = modifierCollectionView.contentSize.height + 4

【讨论】:

    【解决方案2】:

    您在什么时候尝试读取 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 的高度始终与其内容一样大。

    【讨论】:

    • 哇,非常非常感谢。像魅力一样工作!
    • 只要我不更改 collectionview 数据源,您的解决方案就可以工作。如果我有 0 个截止日期并且我有一个新截止日期,则截止日期内容大小仍然为 0,并且单元格不显示。我发布了另一个问题:stackoverflow.com/questions/65587680/…
    猜你喜欢
    • 2013-06-05
    • 1970-01-01
    • 2014-09-12
    • 2011-11-03
    • 2021-02-22
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多