2017-01-03 91 views
1

我想在单元格中显示图像,因为我需要首先下载它,所以我想显示(为了简化问题),应该显示与图像相同宽度和高度的黑色视图。如何在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。

+0

你使用自动布局吗? –

+0

是的,我正在使用自动布局 – Tajnero

+0

那么,为什么你以编程方式做到这一点? –

回答

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

这个问题被标记为“迅速”,而不是“objective-c”。请始终尊重问题的标签。您应该改为发布Swift版本。 – Moritz

0

由于您使用的自动布局,在故事板应设置两件事情:

  • 首先,设置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>,你应该替换与被图像类型细胞的高度。 当然,您的桌子可能有更复杂的设计;这只是涵盖你所问的案例。

+0

谢谢格式化编辑,Rikh:我在急着打字:-) – IanW

+0

没问题!但我认为你应该看看你的'heightForRow',如果代码没有进入'if'条件,应该有一个默认的返回类型:) – Rikh

+1

同样好的调用 - 我能说什么,它已经很长了天:-) – IanW