ios - 将最小部署目标升级到 iOS 14 后 UICollectionView 停止显示单元格
问题描述
我有两个大 UICollectionViewCells 的屏幕。使用 XIB 作为界面生成器。UICollectionView DataSource 和 Delegate 连接到包含它的 UIViewController。已安装复选标记为真。isHidden 是假的。单元格和 UICollectionView 的 Alpha 1。我还使用正确的标识符为 UICollectionView 注册了单元格。
在我从最小部署目标 iOS 13 更新我的项目之前 - UICollectionView 工作正常。升级到 iOS 14 最低部署后 - UICollectionView 不显示单元格。如果我在没有任何代码库更改的情况下将最小部署返回到 iOS 13 - 工作正常。
请任何人保护我的时间,因为我已经浪费了一整天没有运气!提前致谢!
解决方案
所以我找到了这个非常奇怪的错误的原因。我的目标是使用包含灵活 UITextField 的单元格创建 UICollectionView。用户在书写时 - 单元格会根据文本字段中的文本高度更改其大小。
为了实现它,我为我的 UICollectionView 使用了这些配置: 带有 UICollectionView 配置的图像
这里可以看到“Cell Size”宽度为0,“Estimate Size”是自动的。它配置为灵活的单元格高度。
为了使它工作,我还添加了以下代码:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
guard let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout,
flowLayout.estimatedItemSize.width == .greatestFiniteMagnitude else {
return
}
flowLayout.estimatedItemSize = CGSize(
width: view.frame.width - Size.verticalCollectionInsetsDistance * 2,
// Make the height a reasonable estimate to
// ensure the scroll bar remains smooth
height: 200
)
}
这里有一个技巧:当我将我的应用程序升级到 iOS 14 最低部署时,此代码已损坏。因为,由于某种原因,当您将“单元大小”宽度设置为 0 并且您有 iOS 13 最小部署时,那么估计的ItemSize.width == .greatestFiniteMagnitude 为真。但是对于 iOS 14 来说,estimatedItemSize.width == .greatestFiniteMagnitude 是假的,而estimatedItemSize.width == 0 是真的。所以现在我通过添加这个条件“flowLayout.estimatedItemSize.width == 0”来修复我的代码。这是最终版本:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
guard let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout,
flowLayout.estimatedItemSize.width == .greatestFiniteMagnitude || flowLayout.estimatedItemSize.width == 0 else {
return
}
flowLayout.estimatedItemSize = CGSize(
width: view.frame.width - Size.verticalCollectionInsetsDistance * 2,
// Make the height a reasonable estimate to
// ensure the scroll bar remains smooth
height: 200
)
}
PS 我仍然不明白为什么 iOS 14estimateItemSize.width 与 iOS 13 不同。如果你知道答案,请在评论中描述。提前致谢!
推荐阅读
- javascript - Javascript文件未加载
- google-chrome-extension - Chrome 扩展程序发布延迟
- java - 在spring webflow中将我的应用程序的http请求重定向到外部网站
- excel - 在循环中只发送一条带有 HTML 代码的消息
- python - 如何从json单行字典中获取字典
- database - 截断特定数据库中的表
- android - 使用 IntentService 进行依赖注入不起作用
- python - Seaborn Lineplot 错误地尝试对我已经排序的数据进行排序
- javascript - javascript 在 div 中缩放和拖动多个图像。有一些代码,但无法结束
- python - 在python中具有不同行为的列表