繁体   English   中英

UICollectionView 在将最小部署目标升级到 iOS 14 后停止显示单元

[英]UICollectionView stopped showing cells after upgrading minimum deployment target to iOS 14

我有两个大 UICollectionViewCells 的屏幕。 使用 XIB 作为界面生成器。 UICollectionView DataSource 和 Delegate 连接到包含它的我的 UIViewController。 已安装复选标记为真。 isHidden 是假的。 Alpha 1 用于单元格和 UICollectionView。 我还使用正确的标识符为 UICollectionView 注册了单元格。

在我从最小部署目标 iOS 13 更新我的项目之前 - UICollectionView 工作正常。 升级到 iOS 14 最低部署后 - UICollectionView 不显示单元格。 如果我在没有任何代码库更改的情况下将最小部署返回到 iOS 13 - 工作正常。

请任何人保护我的时间,因为我已经浪费了一整天没有运气! 提前致谢!

所以我找到了这个非常奇怪的错误的原因。 我的目标是使用包含灵活 UITextField 的单元创建 UICollectionView。 用户在书写时 - 单元格会根据文本字段中的文本高度更改其大小。

为了实现它,我将这些配置用于我的 UICollectionView: Image with 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 14estimatedItemSize.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不同。如果您知道答案,请在评论中描述。 提前致谢!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM