UICollectionViewCompositionalLayout 不正确的项目大小

Posted

技术标签:

【中文标题】UICollectionViewCompositionalLayout 不正确的项目大小【英文标题】:UICollectionViewCompositionalLayout incorrect item size 【发布时间】:2020-10-13 10:28:54 【问题描述】:

我目前面临一个组合布局问题,这也可以在Apple's example -> ConferenceNewsFeedViewController 中看到。项目高度设置为.estimated(100),宽度设置为.fractionalWidth(1.0)。在初始显示中,单元格没有包装标签内容。只有当您开始滚动时,单元格的布局才会得到纠正。有人知道如何解决这个问题吗?

这是错误的布局:

这是滚动后的布局:

我知道它可以通过以下方式“修复”,但这感觉更像是一种肮脏的工作:

DispatchQueue.main.async 
            self.collectionView.collectionViewLayout.invalidateLayout()
        

对此的任何帮助表示赞赏。

最好, 卡斯滕

【问题讨论】:

嗨,Carsten,您知道 Apple 是否还没有解决这个问题吗?有没有我可以追踪的雷达票?在以前的版本没有这个问题之后,我在 Xcode 12.5 和 ios 14.6 中看到了这一点。谢谢 @dank_muffin 我从未跟进此事,抱歉 【参考方案1】:

我自己也面临同样的问题。就我而言,我有以下设置:

CellSubclass:UICollectionViewListCell CellContentView:UIContentView

在我的 CellContentView 中,我已经覆盖了 layoutSubviews

override func layoutSubviews() 
    super.layoutSubviews()
    invalidateIntrinsicContentSize()   

有时仍然会出现一些小故障,但这比加载时布局错误要好。

【讨论】:

【参考方案2】:

您可以使用此方法设置单元格的大小。

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize 
    return CGSize(width: width, height: height)

【讨论】:

我想使用带有自定尺寸单元格的组合布局。在这里设置明确的大小无济于事

以上是关于UICollectionViewCompositionalLayout 不正确的项目大小的主要内容,如果未能解决你的问题,请参考以下文章