では、 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 が再配置され、サイズが変更されます。