繁体   English   中英

UICollectionView内置的重新排序不适用于不同大小的单元格

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM