在UITableViewCell中设置UIImageView的高度与宽度成比例



我正在尝试制作一个UITableView,其中每个单元格都包含一个纵向或横向UIImageView,其中图像在填充屏幕宽度的同时保持其纵横比,如下所示:

|        |
|########|
|########|
|########|
|########|
|########|
|        |
|########|
|########|
|########|
|        |

我设置了自动布局约束,将UIImageView的边附加到表视图单元格的contentView。这适用于宽度,但高度不是我想要的——它总是扩展到底层图像的整个高度。

我在表格视图上有这些设置:

self.tableView.estimatedRowHeight = 100.0;
self.tableView.rowHeight = UITableViewAutomaticDimension;

在构建单元时,我试图计算必要的高度,以便更改UIImageView:的框架(或高度约束)

let cell = tableView.dequeueReusableCellWithIdentifier("activityPostCell", forIndexPath: indexPath) as UITableViewCell
let image = UIImage(named: "my-image.jpg")
let aspectRatio = image!.size.height / image!.size.width
let imageView = cell.viewWithTag(15) as UIImageView        
let imageViewHeight = aspectRatio * imageView.frame.width

这里的问题是,在布局发生之前,我得到的imageView.frame,所以我无论如何都没有计算正确的高度。

我这样做对吗?有没有一种简单的方法可以设置UIImageView的纵横比来匹配它所包含的图像?提前谢谢。

根据@Wain的建议,添加纵横比约束解决了问题:

let image = UIImage(named: "my-image.jpg")
let aspectRatio = image!.size.height / image!.size.width
let imageView = cell.viewWithTag(15) as UIImageView
imageView.addConstraint(NSLayoutConstraint(
    item: imageView, 
    attribute: NSLayoutAttribute.Height, 
    relatedBy: NSLayoutRelation.Equal, 
    toItem: imageView, 
    attribute: NSLayoutAttribute.Width, 
    multiplier: aspectRatio, 
    constant: 0)
)

最新更新