UICollectionView 自定义布局动画故障,在 performBatchUpdates 上具有自我调整单元格大小

Posted

技术标签:

【中文标题】UICollectionView 自定义布局动画故障,在 performBatchUpdates 上具有自我调整单元格大小【英文标题】:UICollectionView Custom Layout animation glitch with self sizing cell size on performBatchUpdates 【发布时间】:2018-01-26 19:00:29 【问题描述】:

根据我对具有自定义布局的 uicollectionview 中的自定尺寸单元格的理解,参考了 Richard Turton 的 this one 等精彩文章, 处理自定尺寸单元格的方法是通过

    prepare 中为您的单元格/视图设置估计大小,因为它们将有机会使用真正的自动布局计算来更新自己 在单元格本身计算首选属性(框架)的单元格中提供preferredLayoutAttributesFitting, 布局反复使自己失效,直到所有这些都被invalidationContext(forPreferredLayoutAttributes:withOriginalAttributes)覆盖

在初始加载时,这对我来说似乎工作正常。但是,在调用collectionView.performBatchUpdates 驱动的更改中,我要么看到prepare 中设置的估计大小的单元格闪烁,要么有时会结束(如果我试图用初始设置动画它们大小)。

我按照流程进行操作,我看到属性通过失效流程正确提供。 prepare 被多次调用(包括在通过首选属性失效正确设置属性之后)。这似乎会影响正确的大小,至少是暂时的,从而导致动画故障(或错误的最终布局)。

我能找到的唯一可行的解​​决方案是on the interwebs,其中调用了performBatchUpdates,跳过尝试使用首选属性方法,只需在prepare 方法内调用UICV 上的委托方法在该步骤获得正确的尺寸,但这似乎与提供的工具背道而驰。

也许是known issue

仅供参考,与几个集合视图工程师交谈,这似乎是一个错误。他们建议使用参考单元进行手动调整大小的解决方法。

【问题讨论】:

“他们建议使用参考单元进行手动调整大小的解决方法。”这是什么意思? 【参考方案1】:

collectionview 中的浮动标题也有类似的问题。它可能有助于检查:UICollectionView sticky header disappears for while after inserting section when collection is overscrolled (bounce effect)

【讨论】:

以上是关于UICollectionView 自定义布局动画故障,在 performBatchUpdates 上具有自我调整单元格大小的主要内容,如果未能解决你的问题,请参考以下文章

如何更改自定义 UICollectionView 布局引擎中的默认布局动画曲线?

UICollectionView 自定义布局动画故障,在 performBatchUpdates 上具有自我调整单元格大小

使用自定义布局重新加载 UICollectionView 会引发错误

动画 UICollectionView contentInset 调整

UICollectionview 非并行动画

在选择时为 uicollectionview 单元格设置动画