UIViewController
の中にUICollectionView
が設定されています。このビューでは、ボタンで切り替えられたプロパティに基づいて2つの異なるタイプのデータ/セルが表示されます。データソースは常に同じで、各ボタンタップで再投入されます。UICollectionView contentOffsetが間違っています
ボタンアクションがトリガされるたびに、メインデータソース配列を空にして再充填し、コレクションビューで-reloadData
を呼び出します。これは正常に動作し、予期しない動作はありません。
スクロール位置は、contentOffset
のa.k.a.というフィルタの変更後も同じです。つまり、コレクションビューではA
のセルが表示されていて、すばやくスクロールを開始し、ボタンをタップして、セルがB
に変わってもスクロールを続けるように見えます。ユーザーは、覚えていれば、最後の位置まで繰り返しスクロールしなければなりません。
私はこれを解決するために、scrollPositions
NSMutableDictionary
をビューコントローラのプロパティとして使用しようとしました。キーはフィルタタイプ(A
またはB
)を表し、値は現在のコンテンツオフセットのy座標を表します(これは垂直方向にスクロールされたコレクションビューです)。
これはある程度はうまくいくように見えますが、contentOffset
プロパティは一定のピクセル数だけランダムに表示されているように見えますが、時にはそれはちょうど12ダース程度です画面の価値。ここで
は、私がこれまで試したものです:
- が
bounds
をキャプチャする代わりに - 現在可視インデックスパスを思い出し
NO
- に
automaticallyAdjustsScrollViewInsets
を設定edgesForExtendedLayout
- を調整するが、これは正しくないように思わ時には同様に
- コレクションビューで
-invalidateLayout
を呼び出し、オフセットをキャプチャして復元する前に、親ビュー上のを参照してください。 UIPageViewController
にストレートに切り替わり、UIViewController
にはそれぞれのフィルタごとにUICollectionView
が含まれていますが、
残念ながら、私が何を試しても、私はいつも同じ結果に終わります。以前に設定されたフィルタに戻ると、以前に取り込まれたオフセットに変更されます。私はちょうど正直に私の知恵の最後にここに誰かが何か提案を持っていますか? ALSO
、これがすべて自動レイアウトで設定されており、過去にバニラUIScrollView
sおよび自動レイアウトを持ついくつかの悪い経験を持っていた重要な場合。だから、おそらく問題の一部が継承されている可能性がありますか?
ありがとうございました。スクロールを無効にしようとしたことを明記しておきます。また、コレクションビューが内部的にそのロジックを解決し、オフセットプロパティを更新できるように、数秒待ってからフィルタを変更してください。私が提案したシナリオは、スクロールがこの問題の要点ではないが、ユーザーがタブを切り替える場所を提案した。むしろ、 'contentOffset'プロパティの不正確さです。 –