ユーザーがタイプするにつれて、私はバックグラウンドスレッドでローカルワードグラフを走査して結果(テキスト)を取得しています。各キーストロークは前の操作をキャンセルします。操作が完了すると、データソースが更新され、reloadDataがメインスレッドで呼び出されます。数万の結果が返ってきた場合でも、これは素晴らしい結果をもたらし、非常に高速です(ユーザーが入力できる限り速い)。カスタムセルサイズのUICollectionViewのパフォーマンスを向上させるにはどうすればよいですか?
各コレクションビューセルのサイズをカスタマイズするために、UICollectionViewDelegateFlowLayoutデリゲートのsizeForItemAtIndexPathを実装しました。残念なことに、これは、ユーザーが入力するときに、小さくても目立つラグを生じます。私のサイズ計算ロジックで時間が失われていないことを確かめるために、私は固定サイズを返そうとしましたが、それでもパフォーマンスは犠牲になりました。私はこれに驚いています。なぜなら、いつでも画面上に120個程度の細胞しかないからです。このメソッドをコメントアウトすると、非常に大きなデータセットであっても、応答時間は直ちに戻ります。
カスタムセルサイズのUICollectionViewのパフォーマンスを改善するためのアイデアはありますか?
おかげ
追加の明確化...
プログラムは、文字の特定のセットからすべての可能な単語は、ユーザーの種類としてスコアやアルファベット順などでソートを返し、総単語数が上がります高速(複数のワイルドカードが入力された場合、指数関数的に)。入力時にワードが変化するので、セルの幅はそれに応じて更新され、フローレイアウトによって処理されるように次の行にラップされます。
問題は、いつでも画面に表示されるセルの数のようです。 sizeForItemAtIndexPathでは、1つまたは2つのセルしか表示されない大きなサイズが返された場合、更新は非常に高速です。しかし、私がテキストにちょうど合うサイズを返すと、私は100以上の目に見える細胞で終わり、遅れがあります。 sizeForItemAtIndexPathをコメントアウトして固定サイズのセルを使用するだけで高速ですが、それは私が行っていることではありません。
タイピング中にセルのサイズを変更したい、またはカスタムサイズを固定したいですか? –
なぜ画面上のセルを更新するのではなく、 'reloadData'を呼び出すのかを理解しようとしています。 –
上記で追加された追加の説明...ユーザーの種類に応じてセルの幅が変更されます。 reloadDataを呼び出さずにこれをどうすればできますか? – Bama91