如何在UITableViewCell中调整UIImageView的大小?

时间:2017-01-03 07:17:44

标签: ios swift uiimageview

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

因为我想将图像拉伸到与单元格宽度相同的宽度,所以我只需要宽高比来设置高度,这在调用cellForRowAt时在我的代码中提供。

我决定在下载图像之前实现“黑色视图”我只需要一个黑色背景的UIImageView,并在调用cellForRowAt时调整它的大小。但问题出在这里,因为使用类似问题的代码并不适合我。

我在cellForRowAt方法中尝试过类似的内容:

var frame cell.imageView.frame
frame.size.height = CGFloat(aspectRatio) * frame.size.width
cell.imageView.frame = frame

修改

因此我想要像facebook这样的东西,我们的照片宽度与细胞和高度相同,与宽高比相对应。为简单起见,cell只能有UIImageView。

2 个答案:

答案 0 :(得分:0)

由于您正在使用自动布局,因此您应该在故事板中设置两件事:

  • 首先,将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>的地方,您应该将其替换为图像类型的单元格的高度。 当然,你的桌子可能有更复杂的设计;这只是涵盖了你所询问的案例。

答案 1 :(得分:-1)

这是我的解决方案

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;
}