0

UICollectionView画面全体で水平方向にスクロール可能な単一の行としてフォーマットされた があります。これはキュー内の次のエントリを表すため、アイテムが追加および削除されるたびに、常にインデックス 0 (ビューの左端) で発生し、全体が 1 スペースずつ前後に移動します。コードは非常に単純です。

[_collectionviewNextUp insertItemsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]]];

[_collectionviewNextUp deleteItemsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]]];

insertItemsAtIndexPaths:と のアニメーションを除いてdeleteItemsAtIndexPaths:、特に CollectionView アイテムが画面の端を超えて拡張されている場合、すべてが正常に機能しています。キューに 6 つの項目 (一度に表示できる数) しかない限り、完全にアニメーション化されます。7項目以上だとアニメーションがおかしくなります。アイテムを (左から) 削除すると、右に追加されるアイテムもアニメーション化されます。(左側に) 項目を追加すると、右側から削除される項目もアニメーション化されます。キューが 50 アイテムの長さであっても、常にアイテム #6 (画面上で最後に表示されているアイテム) が消えて再び現れるようにアニメーション化します。エラーや警告などはありません。アニメーションが終了した後、ビューに正しい数のアイテムが残っています。画面の端で追加/削除されているセルをアニメーション化するだけです。

私の理論は、再利用可能なセルがアニメーション化されているというものです。それは何かのように聞こえますか?左右のスクロールは完全に機能しますが、挿入と削除はペアでしかアニメーション化されないようで、一方が他方の場所を取っているかのように、常に同じ方向に「飛び込み」と「飛び出し」ます。(経験の浅い私の目には)端のセルが飛ばされて前面に追加されているか、前面のセルが端に移動されているように見えます。

私はこれについて調査を試みましたが、エラーと例外をスローするアニメーションの問題しか見つかりませんでした。他の誰かがこれを経験しましたか?また、インデックス 0 の項目がアニメーション化され、残りの項目がスムーズに画面に出入りするように修正してくれる人はいますか?

4

1 に答える 1

1

フローレイアウトを使用していると思います。フロー レイアウトは、layoutAttributesForElementsInRect:境界を越えてアイテムをアニメーション化する (つまり、アイテムがビューに出入りする) 非常にバグがあります。私の経験では、「initialLayoutAttributesForAppearingItem」finalLayoutAttributesForDisappearingItemAtIndexPath:メソッドをオーバーライドし、スーパー クラスが正しくない値を返すときにフレームを修正することで、これらの問題のいくつかを修正できます。これは、非常によく似た問題に対する成功した回答です。

シンプルな均一グリッド レイアウトVCollectionViewGridLayoutをオープン ソース化しました。これにより、提供されるアニメーションが大幅に改善されUICollectionViewFlowLayoutます。ただし、現在は垂直スクロールのみを行います。しかし、そこに行って、水平方向と垂直方向の計算をすべて転置すれば、問題は解決すると確信しています。

于 2013-08-09T21:06:26.653 に答える