3

では、 1x1 または 60x60 のプレースホルダー イメージにtableView:cellForRowAtIndexPath設定していますが、セルの高さは 300です。imageView.imageimageView.frame(0,0, 300, 300)

次に、 method を呼び出し、downloadImageFromURL:andSetIntoCellすぐに a を追加しUIActivityIndicatorViewてフレームを に設定し(0,0, 300, 300) ます (ダウンロードはスレッドで非同期に行われ、メソッドはダウンロードを待機せず、すぐに戻ります)。

ただし、tableView:cellForRowAtIndexPathセルを戻した後imageView.frame、元の 60x60 サイズの画像を垂直方向に中央揃えに調整します。そのプレースホルダー画像が 800x800 の場合、実際には問題なく動作します。フレームは静止 (0,0, 300, 300) で、画像は縮小されますが、画像が 60x60 の場合、フレームは実際には (0,120, 60, 60)、プレースホルダーは透明なので問題ありませんが、UIActivityIndicatorViewのサブビューとして追加されたimageViewため、垂直方向に押し下げられ、高さが 300 になり、次の行の一部が隠れてしまいます。

UITableView変更しないように指示する方法imageView.frame、またはプログラムで画像を 300x300 に簡単にサイズ変更する方法 (できれば BitmapContext を使用しない) 方法、またはimageViewフレームを埋めるようにスケーリングするように指示する方法はありますか?

追加した:

cell.imageView.contentMode = UIViewContentModeScaleToFill;

を設定した後imageView.frame、これは通常、UIView で描画している場合に機能しますが、UITableView は元の 60x60 サイズを表示し、imageView.frame垂直方向の中央に調整します。

UIActivityIndicatorView(この場合、画像のサイズを60x60にすることができると思いますが、おそらく1x1の透明なプレースホルダー画像でそれを行うことです)

更新:ちなみに、私も追加しました:

self.table.autoresizesSubviews = NO;
self.table.autoresizingMask = UIViewAutoresizingNone;

cell.autoresizesSubviews = NO;
cell.autoresizingMask = UIViewAutoresizingNone;

cell.imageView.autoresizesSubviews = NO;
cell.imageView.autoresizingMask = UIViewAutoresizingNone;

セルが返される前に、それは同じです: imageView が再配置され、サイズが変更されます。

4

1 に答える 1