如何在UITableViewCell中调整UIImageView的大小



我想在单元格中显示图像,因为我需要先下载它,所以我想显示(为了问题的简单性)具有相同宽度和高度的黑色视图,就像应该显示的图像一样。

因为我想将图像拉伸到与单元格宽度相同的宽度,所以我只需要纵横比来设置高度,这是在调用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;
}

最新更新