1

我在 iOS14 处理 CollectionView 的方式中遇到了一个奇怪的行为。我注意到(从 iOS13.5 更改为 iOS14) UICollectionViewCells 的显示顺序是错误的。下面的图片是完全相同的代码(在 xCode12 中)的屏幕截图,唯一的区别是正确的是 iOS13.5 的构建和 iOS13.5 的 iPhone 11 模拟器,而错误的是 iOS13.5 iOS14 的构建和 iOS14 上带有 iPhone 11 的模拟器。其他一切(代码、设置等)都完全相同:

图 1,集合应该如何显示(在 iOS13.5 中正确):

在此处输入图像描述

如果用iOS14构建相同的代码,并在与iOS14相同的iPhone模拟器上运行,结果如下(不是顺序不对:是反了):

在数据源(这是一个带有标签的数组)中,一切都是正确的,并且 cellForItemAt 委托工作正常。

在 iOS14 中肯定有一些不同的处理方式。最后一个示例是另一个屏幕截图,其中框的大小不同(取决于标签的长度):

正确(为 iOS13.5 构建)是:

在此处输入图像描述

在为 iOS14 构建时会产生以下结果:

在此处输入图像描述

同样,代码完全相同,我只是为不同的 iOS 版本构建项目。在我看来,为 iOS14 修改集合的方式可能存在错误。欢迎任何帮助或想法。

4

1 回答 1

0

我已经找到了解决这个问题的方法,我认为它指出了 iOS14 中 UICollectionView 的委托管理方式可能发生了一些变化。

解决方案很简单:我刚刚添加了

cell.setNeedsDisplay()

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath)

在返回单元格之前。

代码没有其他变化。我注意到在 iOS14 中,单元格的 draw() 没有像在 iOS13.5 中那样被调用。因此添加 setNeedsDisplay() 会强制重绘单元格,这在 iOS13.5 中是在没有新代码行的情况下发生的。

我很想知道是否有人知道任何变化。谢谢

于 2020-10-04T09:21:48.677 回答