我有一个自定义的tableview,在每个单元格下我都有图像视图。我从服务中接收到不同大小的图像,我想根据它调整我的框架。
每当图片小于框架尺寸时,我想根据其高度调整高度。
所以我正在比较当前的帧大小和图像大小,并尝试更新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);
}
需要做些什么来克服这个问题?
答案 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