UICollectionViewCompositionalLayout项目大小错误

问题描述

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

这是不正确的布局:

incorrect layout

这是滚动后的布局:

correct layout

我知道可以使用以下内容“修复”它,但这听起来更像是一种肮脏的解决方法

dispatchQueue.main.async {
            self.collectionView.collectionViewLayout.invalidateLayout()
        }

对此有任何帮助。

最好, 卡斯滕

解决方法

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

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

}

,

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

  • CellSubclass:UICollectionViewListCell
    • CellContentView:UIContentView

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

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

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