gpt4 book ai didi

ios - 使用 [UICollectionView performBatchUpdates :] with a UICollectionViewFlowLayout that has UIDynamics

转载 作者:技术小花猫 更新时间:2023-10-29 10:48:46 26 4
gpt4 key购买 nike

好的,基本概述。我有一个 UICollectionView,我需要它支持通过 performBatchUpdates: 方法添加和删除项目。如果我使用标准的 UICollectionViewFlowLayout,它工作正常。

但是,当我尝试使用由 UIDynamicAnimator 驱动的 UICollectionViewFlowLayout 时,我一调用 performBatchChanges 就崩溃了>.

在我的自定义 UICollectionViewFlowLayout 类中,永远不会调用 prepareForCollectionViewUpdates: 方法。我使用的自定义 UICollectionViewFlowLayout 基于 this sample .

崩溃后的控制台输出是...

*** Assertion failure in -[UICollectionViewData layoutAttributesForItemAtIndexPath:], /SourceCache/UIKit/UIKit-2903.23/UICollectionViewData.m:581
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'no UICollectionViewLayoutAttributes instance for -layoutAttributesForItemAtIndexPath: <NSIndexPath: 0xc000000000028096> {length = 2, path = 2 - 5}'
*** First throw call stack:
libc++abi.dylib: terminating with uncaught exception of type NSException

有什么想法吗?

最佳答案

尝试

- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewLayoutAttributes *layoutAttributes = [self.dynamicAnimator layoutAttributesForCellAtIndexPath:indexPath];
if(!layoutAttributes) {
layoutAttributes = [super layoutAttributesForItemAtIndexPath:indexPath];
}
return layoutAttributes;
}

当您执行 performBatchUpdates 时,如果更新创建的单元格不可见,[self.dynamicAnimator layoutAttributesForCellAtIndexPath: 将返回 nil。所以只返回 super(可能是 UICollectionViewFlowLayout)'s layoutAttributes 现在。当单元格即将显示时,UIDynamicAnimator 将为您完成这项工作。

关于ios - 使用 [UICollectionView performBatchUpdates :] with a UICollectionViewFlowLayout that has UIDynamics,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20436022/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com