2016-10-05 7 views
3

UICollectionViewには水平スクロールとページングがあります。次回または前のページに最初にスクロールしたり、スクロール方向を左から右に変更すると、cellForItemAtIndexPathのindexPath.rowの値が1でなく3だけ変化します。 CollectionViewは問題なく動作しますiOS 9.問題はちょうどiOSに発生します10.ありがとう。UICollectionView cellForItemAt indexPathはiOS 10の行インデックスをスキップしています

+0

あなたが「3で変化する」と言うと、あなたの意図がはっきりしません。いくつかのインデックスを一度も求められていないということですか?または、あなたに驚かされる順序で索引を求められることはありますか? –

+0

理解を深めるため、ビデオhttps://www.youtube.com/watch?v=BTaD_InGt6g&feature=youtu.beを追加しました。問題はiOS 10で発生します。 –

+0

あなたのページサイズはおそらく誤っています。いくつかのコードがないと、あなたを助ける方法が明確ではありません。コードをトレースして、どのようなデータソースメソッドが呼び出され、どの値を持つかを正確に確認する必要があります。私はコレクションビューの新しいプリフェッチ動作に驚いていると思います(コレクションビューでは、まだ表示されていないセルが要求されるようになりました)。 –

答えて

2

問題は、UICollectionViewの新しいプリフェッチ機能にありました。プリフェッチを無効にすると私の問題が解決しました。

if #available(iOS 10.0, *) {collectionView.isPrefetchingEnabled = false} 
0

可能なケース:

あなたcollectionViewでページングを使用している、とあなたの宣言として、1ページが3個の細胞を含んでいるので。したがって、1ページ移動すると、左のセルからインデックスを取るので、セルのインデックスは3だけ移動します。

など。セル>ページ1:[0..1..2]ページ2:[3..4..5]

+0

私はページに1つのセルを使用します。 iOS 9では完全に動作します。 iOS 10の問題:https://www.youtube.com/watch?v=BTaD_InGt6g&feature=youtu.be。 –

+0

ビデオとして、コレクションビューが対応するページに正しいセルを表示していることを示していません。つまり、ページ6が番号6のセルを表示していると判断できません。セルが正しくないため、「cellForItemAtIndexPath」が正しい値を返すことができません。 ところで、 'collectionView.visibleCells'を使って、どのセルが表示されているかを調べることをお勧めします。そして、 "cellForItemAtIndexPath"でそれらを作成するときに、それらのセルに 'TAG'を追加することができます。行番号を表示するには、タグ番号を使用します。 または、左/右ボタンの方法で論理的なエラーが発生することがあります。 – KTang

関連する問題