在
然后我调用了一个名为
然而,在
有没有办法告诉
在单元格返回之前,它是相同的:imageView 被重新定位和调整大小。
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 被重新定位和调整大小。