2016-06-23 2 views
1

私のiOSアプリケーションでは、コンテンツをサーバーから動的に更新するUICollectionViewがあります。 UIollectionViewに10個のセル(インデックス0-9)があると仮定しましょう。他の10個のオブジェクトをダウンロードすると、それらをインデックス(0-9)に挿入し、古いアイテムをインデックス(10-19)にシフトします。アイテムを上部に挿入しながらUICollectionViewをスクロールさせないようにする

私の目標は、UICollectionViewのアニメーションを無効にすることです。トップ3にインデックス3の要素がある場合、他の10個のアイテムを追加すると、トップアイテムとして追加されますが、更新後はインデックス13になります)。

私はUIView.performWithoutAnimation方法で挿入するか、このコードを使用してUICollectionViewアイテムをラップ試してみました:

UIView.setAnimationsEnabled(false) 

// insert items in collection view using perform batch updates 

UIView.setAnimationsEnabled(true) 

しかし、結果はまだ良いではないと私はトップレンジに項目​​を追加するとき、私のUICollectionViewはまだ「ランダム」にスクロールします。

答えて

0
私はここにしようとしなかったが

はあなたが試すことができますもののリストです:あなたの更新前self.collectionView.scrollEnabled = falseself.collectionView.scrollEnabled = trueを設定

  • わからないの後がありますが、self.collectionView.scrollsToTop = false
  • 保存を設定してみてくださいCGPointのスクロールビューの現在位置、更新後すぐにself.collectionView.setContentOffset(previousPosition, animated: false)

役に立った

+0

3番目のアプローチは良いと思われる。私は違いを持っ​​てそれを実装しました。私は私の最後のコンテンツのオフセットを覚えている、私はすべての項目を追加し、私はrememberedContentOffset + addedItemsTotalHeightにコンテンツオフセットを設定します。それは、挿入後、私はまだ覚えている細胞を見ていますが、視覚効果は非常に悪いです。挿入中にスクロールアップし、すべてのアニメーションを無効にした場合はスクロールします – lubilis

+0

この副作用を避けるための解決策を見つけましたか? – AnthoPak

+0

アニメーションは本当に完璧ではありませんが、私はそれがうまくいくようにいくつかのロジックを実装しました。アレイ内のすべてのセルの高さとその他のパフォーマンスの向上を保存するようなもの – lubilis

1

データアレイを変更し、.reloadDataをコレクションビューで使用するのはどうでしょうか?

すべてをスクロールしないでください。これは、30要素のスクロールビューの一番下にある場合は、一番下にとどまることを意味します。

しかし、あなたは右、後で呼び出すことができ、それがでたり、アニメーションなしでトップにスクロールを強制します:

collectionview.SetContentOffset(CGPoint.Zero, false);

上記のラインがメモリから書かれており、その綴りで、おそらく間違っています。基本的には、プロパティではなくメソッドを使用して0,0のコンテンツオフセットを設定し、2番目のパラメータを使用してアニメーションを削除します。

+0

私はすでに成功していないあなたのリンクに提供されたソリューションを試していました。私はperformBatchUpdatesを使用します、私はそれを使用しないでください? – lubilis

+0

実際、あなたはそれを別の方法で行うことができます。私の編集された答えを見てください。シナリオで.reloadDataを使用していますか? –

+0

リロードデータを使用しようとしましたが、とにかくスクロールします。私はアイテムを挿入してスクロール位置を維持したいので、私もそれを使用しないことを好む。私は思い出した位置にプログラムでスクロールしなければならないと思う+(アイテムの合計高さを加えたもの) – lubilis

関連する問題