[英]UICollectionView built-in reordering not working correctly for cells of different sizes
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);
对于那些有此问题的人,原因是UICollectionView
不会在拖动发生时重新排列项目的布局属性 。
我的意思是,如果项目#2为50x50,项目#3为100x100,则在实时拖动项目并对其进行交换时, UICollectionView
也不会自动交换其大小。 位置2处的任何内容始终假定为50x50,位置3处的任何内容始终假定为100x100。
解决方案是确保在移动项目时,会不断更新UICollectionView
数据源以反映新位置。 最好的方法似乎是在UICollectionView
委托方法中:
- (NSIndexPath *)collectionView:(UICollectionView *)collectionView
targetIndexPathForMoveFromItemAtIndexPath:(NSIndexPath *)originalIndexPath
toProposedIndexPath:(NSIndexPath *)proposedIndexPath
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.