如何在自定义tableview单元格下调整UIImageview

时间:2016-03-28 08:24:29

标签: ios uitableview uiimageview

我有一个自定义的tableview,在每个单元格下我都有图像视图。我从服务中接收到不同大小的图像,我想根据它调整我的框架。

每当图片小于框架尺寸时,我想根据其高度调整高度。

enter image description here

所以我正在比较当前的帧大小和图像大小,并尝试更新imageview帧,但它不起作用。

cell.image.contentMode = UIViewContentModeScaleAspectFit;
        if(cell.image.image.size.height<cell.image.frame.size.height)
        {
        cell.image.frame = CGRectMake(cell.image.frame.origin.x, cell.image.frame.origin.y,cell.image.frame.size.width, cell.image.image.size.height);
        }

需要做些什么来克服这个问题?

2 个答案:

答案 0 :(得分:0)

如果上面的代码在cellForRowAtIndexPath中,并且你在cellForRowAtIndexPath中初始化的单元格是ItemCell的实例(例如),那么在你的ItemCell类中,你必须覆盖layoutSubviews并检查里面的图像子视图的大小layoutSubviews并相应调整layoutSubviews中单元格框架的高度。这确保了每次调用cellForRowAtIndexPath时,UITableViewCell子类(ItemCell)的布局都会在cellForRowAtIndexPath呈现单元格之前发生。

顺便说一句,您已将单元格的contentMode设置为ScaleAspectFit,这意味着无论您对单元格内的imageView框架执行什么操作,图像都将始终缩放以适合可用的整个视图,即在这种情况下,单元格内的imageView的尺寸。也许你应该尝试移动contentMode行

 cell.image.contentMode = UIViewContentModeScaleAspectFit;

在您设置imageView的帧大小的条件之后:

    if(cell.image.image.size.height<cell.image.frame.size.height)
    {
    cell.image.frame = CGRectMake(cell.image.frame.origin.x, cell.image.frame.origin.y,cell.image.frame.size.width, cell.image.image.size.height);
    }
cell.image.contentMode = UIViewContentModeScaleAspectFit;

当然,如果你没有覆盖layoutSubview来调整imageView框架的尺寸,这可能无法解决问题。

答案 1 :(得分:0)

您需要根据UITableView数据源中的图像更改单元格高度,如此

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
  if (image.size.width > CGRectGetWidth(self.view.bounds)) {
    CGFloat ratio = image.size.height / image.size.width;
    return CGRectGetWidth(self.view.bounds) * ratio;
  } else {
    return image.size.height;
  }
}

修改 如果您正在寻找调整图像大小而不是tableview单元格,那么这些是Resize UIImage with aspect ratio?Resize UIImage with aspect ratio?非常好的参考。您还应该了解UIImageView Scaling Explained Visually