UICollectionView
添加了对iOS 9中重新排序单元格的支持,但如果所有单元格大小不同,则实时交互无法正常工作:
请注意,在此屏幕中,捕获具有相同大小的交换单元#3和#2如何正常工作,而不是单元#3和#1:
基本上,UICollectionView
在移动所选单元格时不会重新计算其他单元格的布局。有谁知道一项工作?
另一个相关问题是,当完成不同大小的单元格的重新排序时,您需要手动使UICollectionView
布局无效,否则某些单元格的位置无效且重叠。
PS:我正在使用长按手势识别器并根据需要调用这些方法:
- (BOOL)beginInteractiveMovementForItemAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(9_0); // returns NO if reordering was prevented from beginning - otherwise YES
- (void)updateInteractiveMovementTargetPosition:(CGPoint)targetPosition NS_AVAILABLE_IOS(9_0);
- (void)endInteractiveMovement NS_AVAILABLE_IOS(9_0);
- (void)cancelInteractiveMovement NS_AVAILABLE_IOS(9_0);
答案 0 :(得分:2)
对于遇到此问题的用户,原因是UICollectionView
在拖动过程中没有为项目重新排列布局属性。
我的意思是,如果第2项是50x50且第3项是100x100,在实时拖动项目并交换它们时,UICollectionView
也不会自动交换它们的尺寸。无论位置2处的是什么,总是假设为50x50,而位置3处的任何位置始终假设为100x100。
解决方案是确保在移动项目时,UICollectionView
数据源连续更新以反映新位置。最好的方法是使用UICollectionView
委托方法:
- (NSIndexPath *)collectionView:(UICollectionView *)collectionView
targetIndexPathForMoveFromItemAtIndexPath:(NSIndexPath *)originalIndexPath
toProposedIndexPath:(NSIndexPath *)proposedIndexPath