0

わかりました、動的コンテンツを(Webから)UITableViewにロードすることと、セルの高さを事前に計算することに関する問題について、たくさんの小片を読みました。さまざまな単純な実装を試しましたが、問題は解決しません...

Web から JSON ファイルを読み取り、それを「アイテム」オブジェクトに解析する必要があると仮定すると、それぞれに可変サイズの画像とさまざまなテキスト ラベルが含まれます。読み込んでいます:

  1. アプリの読み込み時に JSON ファイルを読み取り、項目配列に解析します
  2. 項目配列のごく一部 (約 10 項目) のみを tableview に提供します。セルの高さを計算するには、各項目に関連付けられた画像を読み込む必要があるためです。 images - これにより、すべての画像が読み込まれるまでアプリがハングします
  3. 使用可能なセルを含むテーブルビューを表示します (いくつかの「予備の」セルをロードすると仮定すると、ユーザーはより多くの項目にスクロールすることもできます)
  4. Grand Central Dispatch を使用してバックグラウンドで残りのアイテムのすべてまたは一部の画像をダウンロードし、新しいデータでテーブルビューをリロードします (アイテム リストが非常に長い場合は、手順 4 を繰り返します)。

最初に画像を読み込まないとセルの高さを計算する方法がないため、上記の手順 2 が必要です。tableview は最初にすべてのセルの高さを計算するため、すべてのアイテムのすべての画像をダウンロードするには非常に長い時間がかかる場合があります。

これが正しいアプローチだと思いますか?私は何かを逃していますか?

4

2 に答える 2

2

テーブルビューで画像サイズを標準化してはいかがでしょうか。次に、サイズに合わせて表示される画像を操作できます。選択した場合、画像を表示する方法を提供します。Quartzcore フレームワークを使用すると、元の画像を取得してサイズを変更できます。

これをお勧めするのは、ランダムな画像サイズよりも均一な画像サイズの方がテーブルビューがより魅力的に見えるからです。

于 2012-04-03T21:41:15.433 に答える
0

データがまだロードされている間でも、ショーを続けなければならないのは正しいことです。したがって、正しいイメージを得る前に、魅力的に見えるセルを設計する必要があります。一般的なアプローチは、デフォルトの画像を出荷し、見栄えがよくなるようにセルをフォーマットすることです。

高さを処理するために、tableView データソース プロトコルはセルの高さを尋ねることができます。答える方法は、疑似コードで次のとおりです。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

  id myModelElement = [self.myModel objectAtIndex:indexPath.row];
  UIImage *image = myModelElement.image;
  if (!image) image = self.placeholderImage;

  return kFIXED_HEIGHT + image.size.height;
}

また、画像を非同期でロードすることも正しいです。 それに対する非常に簡単なアプローチについては、こちらの回答を参照してください。GCD もテーブル行のリロードもありません。

于 2012-04-03T23:25:25.320 に答える