ios - 即使没有添加或删除单元格,也未定义 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
解决方案
推荐阅读
- javascript - js:使用 + 和 += 为“for”循环中的每个元素添加空格之间的区别?
- c# - 在 C# 中从 byte[] 缓冲区复制到 IBuffer 创建“值不在预期范围内”。例外
- sql - 使用 JPA 获取结果集时出错
- mean - 2 个数据集的标准偏差(每个数据集都有标准偏差)
- flutter - value.isEmpty 在我尝试编译代码时抛出错误
- java - Java:将 JSON 对象属性查找为精确的 JSON 子字符串(具有精确的格式)
- javascript - 更改 Div 的可见性,在网页加载时使用 jQuery 和 html 选择
- mongodb - MongoDB findByIdAndUpdate 数组不更新某些项目
- azure - 将更改发布到 Azure Synapse 工作区时,当前运行的管道是否中断?
- amazon-web-services - 如何授予对 IAM 角色/用户的访问权限以在 AWS Elasticsearch 中创建角色?