首页 > 解决方案 > 即使没有添加或删除单元格,也未定义 UICollectionViewFlowLayout 的行为

问题描述

我有一个 parentView,它最初位于屏幕的中心,固定在两侧,高度为 300,通过按钮触摸改变屏幕的大小。我还可以将 parentView 移动到屏幕的顶部或底部。collectionView 被固定到 parentView 的中心,高度也为 300,但它的高度永远不会改变。当我按下按钮更改 parentView 的大小时,我收到控制台警告:

未定义 UICollectionViewFlowLayout 的行为,因为:项目高度必须小于 UICollectionView 的高度减去部分插入顶部和底部值,减去内容插入顶部和底部值。相关的 UICollectionViewFlowLayout 实例...在 UICollectionViewFlowLayoutBreakForInvalidSizes 处创建一个符号断点以在调试器中捕获它。

我添加了断点,并且在view.layoutIfNeeded()动画块内专门调用后总是出现警告。我试图collectionView.collectionViewLayout.invalidateLayout()在不同的地方打电话,但警告不断出现。

parentViewHeightConstraint?.constant = UIScreen.main.bounds.height

UIView.animate(withDuration: 0.33) { 
    self.view.layoutIfNeeded()
    // self?.invalidateCollectionViewLayout() // I tried invalidating the cv here and right above view.layoutIfNeeded()
} completion: { (_) in
    // self?.invalidateCollectionViewLayout() // I tried invalidating the cv here
}

func invalidateCollectionViewLayout() {
    collectionView.reloadData() // I tried with and without reloading
    collectionView.collectionViewLayout.invalidateLayout()
}

我注意到sizeForItem当我移动 parentView 或使其更大时会被调用。我没有添加或删除任何单元格,并且 cv 大小始终为 300。

有时也会出现此警告,但随机出现:

无效更新:第 0 节中的项目数无效。更新后现有节中包含的项目数 (1) 必须等于更新前该节中包含的项目数 (1),加上或减去数字从该部分插入或删除的项目数(1 个插入,0 个删除)加上或减去移入或移出该部分的项目数(0 个移入,0 个移出)。- 将执行 reloadData

标签: iosswiftuicollectionview

解决方案


推荐阅读