【问题标题】:Strange issue with updating UICollectionView size更新 UICollectionView 大小的奇怪问题
【发布时间】:2021-11-08 05:44:47
【问题描述】:

我有一个 UICollectionView,它的初始高度是 50。 当我知道单元格的大小时,我想更新它。 对于我所做的:

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
    let categoriesCount = 16
    let numberOfItemsInRow = 3
    let numberOfRows = ceil(CGFloat(categoriesCount) / CGFloat(numberOfItemsInRow))

    let newHeight = (numberOfRows * cell.frame.size.height)

    collectionHeight.constant = newHeight
    collectionView.collectionViewLayout.invalidateLayout()
}

但是尽管调用了invalidateLayout - collectionView 的高度保持不变 - 50。

但是当我切换屏幕时,当我第二次使用 UICollectionView 打开该屏幕时,它会显示正确的高度。

我做错了什么,如何更新 UICollectionView 的高度?

我什至在collectionView.collectionViewLayout.invalidateLayout 之后尝试了collectionView.updateConstraints(),但仍然没有运气

更新

我也试过了

collectionView.layoutIfNeeded()
self.superview?.layoutIfNeeded()

但没有结果。

【问题讨论】:

    标签: ios swift uicollectionview


    【解决方案1】:

    与其稍后尝试根据单元格的大小更新collectionView,我们可以不使用estimated height调整单元格吗?

    【讨论】:

      【解决方案2】:

      为此,您可能必须调用self.view.layoutIfNeeded() 方法来强制视图更新其布局。

      根据documentation

      ...此方法从根开始布局视图子树。

      因此,更新您的视图

      有关更多信息,您可以阅读this 线程,您可以在其中挑选一些零碎的内容添加到您的解决方案中。

      【讨论】:

      • 不幸的是,我也尝试过,但对我没有帮助 =/
      • 您是否尝试将 ui 操作封装在 dispatchQueue 中?
      • 我重试了您的代码,它在没有任何补充代码的情况下运行良好。您能否附加其余代码,以便我们更好地了解哪里出了问题?另外,您在使用 Storyboard 吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-02
      相关资源
      最近更新 更多