![](/img/trans.png)
[英]How to resize a UIImageView and force relayout of the parent UITableViewCell
[英]How to resize UIImageView in UITableViewCell?
我想在单元格中显示图像,并且因为我需要先下载它,所以我想显示(为简单起见)具有与图像相同的宽度和高度的黑色视图。
因为我想将图像拉伸到与单元格宽度相同的宽度,所以我只需要设置纵横比即可设置高度,这在调用cellForRowAt
时在我的代码中提供。
我决定在下载图像之前实现“黑视图”,我只需要一个具有黑色背景的UIImageView,并在调用cellForRowAt
时调整其大小。 但这是问题所在,因为使用类似问题的代码对我不起作用。
我在cellForRowAt
方法中尝试过这样的事情:
var frame cell.imageView.frame
frame.size.height = CGFloat(aspectRatio) * frame.size.width
cell.imageView.frame = frame
编辑
结果,我想要像facebook这样的东西,其中我们的照片具有与单元格相同的宽度和与宽高比相对应的高度。 为简单起见,单元格只能具有UIImageView。
由于您使用的是自动布局,因此在情节提要中应设置以下两项:
UIImageView
的宽度设置为单元格的完整宽度 UIImageView
的宽高比设置为1:1-这表示高度始终与宽度相同。 如果您要使用UITableView
“ 自动尺寸”作为单元格高度,那么这应该就足够了; 任何地方都没有代码,其他一切都正常。
如果您没有使用自动像元高度功能,则如果它们都相同,或者使用相同的像元,或者使用self.tableView.rowHeight = self.tableView.bounds.size.width
设置一次像元高度。不同的高度:
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
if (<indexPath IS IMAGE ROW>)
return tableView.bounds.size.width
return <default height>
}
在我写过<indexPath IS IMAGE ROW>
,应将其替换为需要检测该特定单元格是否为图像类型的任何条件。 另外,正如Rikh所指出的那样,在我写<default height>
,应将其替换为非图像类型的单元格的高度。 当然,您的桌子可能设计得更加复杂。 这仅涵盖了您要询问的情况。
这是我的解决方案
imageView.contentMode = UIViewContentModeCenter;
if (imageView.bounds.size.width > ((UIImage*)imagesArray[i]).size.width && imageView.bounds.size.height > ((UIImage*)imagesArray[i]).size.height) {
imageView.contentMode = UIViewContentMode.ScaleAspectFit;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.