Ios UICollectionView移动项目并保持单元格大小

Ios UICollectionView移动项目并保持单元格大小,ios,objective-c,uicollectionview,Ios,Objective C,Uicollectionview,我有不同大小的单元格,我正在尝试移动CollectionView单元格,并将移动/选定的单元格大小移动到新位置 我已经在Github上公开了,如果你想成为合作者,请告诉我 我正在对UICollectionViewFlowLayout进行子分类,并实现了以下功能: - (UICollectionViewLayoutInvalidationContext *)invalidationContextForInteractivelyMovingItems:(NSArray<NSIndexPath

我有不同大小的单元格,我正在尝试移动CollectionView单元格,并将移动/选定的单元格大小移动到新位置

我已经在Github上公开了,如果你想成为合作者,请告诉我

我正在对UICollectionViewFlowLayout进行子分类,并实现了以下功能:

- (UICollectionViewLayoutInvalidationContext *)invalidationContextForInteractivelyMovingItems:(NSArray<NSIndexPath *> *)targetIndexPaths withTargetPosition:(CGPoint)targetPosition previousIndexPaths:(NSArray<NSIndexPath *> *)previousIndexPaths previousPosition:(CGPoint)previousPosition{

    UICollectionViewLayoutInvalidationContext *context = [super
                                                          invalidationContextForInteractivelyMovingItems:targetIndexPaths
                                                          withTargetPosition:targetPosition
                                                          previousIndexPaths:previousIndexPaths
                                                          previousPosition:previousPosition];

    [self.collectionView moveItemAtIndexPath:previousIndexPaths[0] toIndexPath:targetIndexPaths[0]];

    return context;
}

您知道如何保持大小吗?

我遇到了相同的问题,原因是您需要调用代理的moveItemAtIndexPath

- (UICollectionViewLayoutInvalidationContext *)invalidationContextForInteractivelyMovingItems:(NSArray<NSIndexPath *> *)targetIndexPaths withTargetPosition:(CGPoint)targetPosition previousIndexPaths:(NSArray<NSIndexPath *> *)previousIndexPaths previousPosition:(CGPoint)previousPosition{

    UICollectionViewLayoutInvalidationContext *context = [super
                                                          invalidationContextForInteractivelyMovingItems:targetIndexPaths
                                                          withTargetPosition:targetPosition
                                                          previousIndexPaths:previousIndexPaths
                                                          previousPosition:previousPosition];

    [self.collectionView.dataSource collectionView:self.collectionView moveItemAtIndexPath:previousIndexPaths[0] toIndexPath:targetIndexPaths[0]];

    return context;
}
-(UICollectionViewLayoutInvalidationContext*)无效上下文用于交互操作项:(NSArray*)targetIndexPath with targetPosition:(CGPoint)targetPosition PreviousIndexPath:(NSArray*)PreviousIndexPath previousPosition:(CGPoint)previousPosition{
UICollectionViewLayoutInvalidationContext*上下文=[super]
InvalizationContextForInteractivelyMovingItems:TargetIndexPath
withTargetPosition:targetPosition
previousIndexPaths:previousIndexPaths
previousPosition:previousPosition];
[self.collectionView.dataSource collectionView:self.collectionView moveItemAtIndexPath:PreviousIndexPath[0]到IndexPath:TargetIndexPath[0]];
返回上下文;
}

单元格的大小是随机的还是相对于内容进行初始化?它相对于内容。我的灵感来自:好吧,那么你的问题是你的下拉视图的大小与你拖动它之前的大小不一样?对,单元格大小的改变不太容易,对吧:-)
- (UICollectionViewLayoutInvalidationContext *)invalidationContextForInteractivelyMovingItems:(NSArray<NSIndexPath *> *)targetIndexPaths withTargetPosition:(CGPoint)targetPosition previousIndexPaths:(NSArray<NSIndexPath *> *)previousIndexPaths previousPosition:(CGPoint)previousPosition{

    UICollectionViewLayoutInvalidationContext *context = [super
                                                          invalidationContextForInteractivelyMovingItems:targetIndexPaths
                                                          withTargetPosition:targetPosition
                                                          previousIndexPaths:previousIndexPaths
                                                          previousPosition:previousPosition];

    [self.collectionView.dataSource collectionView:self.collectionView moveItemAtIndexPath:previousIndexPaths[0] toIndexPath:targetIndexPaths[0]];

    return context;
}