首页 > 解决方案 > iOS14中的自定尺寸UICollectionViewCell

问题描述

在此处输入图像描述 在此处输入图像描述 堆栈:Mac OS 10.15.6,Xcode 版本 12.0 (12A7209)

我有一个自定尺寸的收集单元。我重写preferredLayoutAttributesFitting以获得自我调整大小的功能。在 iOS 14(“1”)之前一切正常。但是,在 iOS 14 中(针对模拟器或实际设备时),此单元格似乎已“损坏”,即现在显示为“2”。此外,布局引擎抱怨布局约束(“3”)。

你见过类似的问题吗?

标签: uicollectionviewcellselfios14sizing

解决方案


我遇到了同样的问题,该单元格在 iOS 11、12、13 上看起来不错,但在 iOS 14 模拟器上,不知何故preferredLayoutAttributesFitting,每个单元格都返回了相同的高度,而忽略了某些单元格需要更高的高度。

iOS 14 上的问题代码(适用于 iOS 13 及更低版本):

    override func preferredLayoutAttributesFitting(
        _ layoutAttributes: UICollectionViewLayoutAttributes
    ) -> UICollectionViewLayoutAttributes {
        layoutAttributes.bounds.size.height = systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).height
        return layoutAttributes
    }

但是contentView,您可以将一个属性传递给此函数(如果您的单元格是UICollectionViewCell您已经拥有的子类)

解决方案(适用于我尝试过的所有 iOS 版本):

    override func preferredLayoutAttributesFitting(
        _ layoutAttributes: UICollectionViewLayoutAttributes
    ) -> UICollectionViewLayoutAttributes {
        layoutAttributes.bounds.size.height = contentView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).height
        return layoutAttributes
    }

瞧,它又可以工作了。

如果有人能解释这里发生的事情,iOS 14 中发生了什么变化,我将不胜感激......

我并不是说这是所有 iOS 14 自动调整单元问题的解决方案,但值得一试!:)


推荐阅读