2016-07-22 4 views
1

UICollectionView iOS 9でセルを並べ替える機能が追加されましたが、すべてのセルのサイズが同じでない場合、ライブインタラクションは正しく機能しません。異なるサイズのセルでUICollectionView組み込みリオーダリングが正しく機能しない

この画面では、同じサイズを持っているかスワップセル#3と#2を、キャプチャ

お知らせ、それが細胞#3、#1のためのものではありませんが、正常に動作します:

enter image description here

基本的にそれが表示されます。 UICollectionViewは、セレクタを移動している間に他のセルのレイアウトを再計算しませんd細胞。誰かが周りの仕事を知っていますか?

異なるサイズのセルの並べ替えが完了したら、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); 

答えて

2

、その理由はUICollectionViewレイアウトを再配置していないということですドラッグ中にアイテムの属性が表示されます。

UICollectionViewは、アイテム#2が50x50でアイテム#3が100x100で、アイテムをドラッグしてスワップしても自動的にサイズを入れ替えないことを意味します。位置2にあるものは常に50x50であるとみなされ、位置3にあるものは常に100x100と仮定されます。

解決策は、項目を移動したときに、のデータソースが新しい位置を反映するように更新されるようにすることです。これを行う最善の方法は、UICollectionViewデリゲートメソッドのようです:

- (NSIndexPath *)collectionView:(UICollectionView *)collectionView 
     targetIndexPathForMoveFromItemAtIndexPath:(NSIndexPath *)originalIndexPath 
     toProposedIndexPath:(NSIndexPath *)proposedIndexPath 
関連する問題