では、 1x1 または 60x60 のプレースホルダー イメージにtableView:cellForRowAtIndexPath
設定していますが、セルの高さは 300です。imageView.image
imageView.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 が再配置され、サイズが変更されます。