在tableView:cellForRowAtIndexPath
中,我设置imageView.image
为 1x1 或 60x60 占位符图像,而单元格的高度为 300。我还设置imageView.frame
为(0,0, 300, 300)
.
然后我调用一个方法downloadImageFromURL:andSetIntoCell
,它立即添加一个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 被重新定位和调整大小。