将 UITableViewCell 高度设置为 UIImage 高度?

Posted

技术标签:

【中文标题】将 UITableViewCell 高度设置为 UIImage 高度?【英文标题】:Set UITableViewCell height to UIImage height? 【发布时间】:2016-03-05 15:30:52 【问题描述】:

我有一个自定义的 TableViewCell,我希望它的高度与 UIImage 的大小相匹配。单元格中的 UIImageView 设置为宽高比,我希望 UIImageview 与它包含的 UIImage 一样高,并且宽度等于表格视图的宽度(屏幕宽度)。在方法 heightForRowAtIndexPath: 我有给定 indexPath.row 的单元格包含的图像。单元格是这样配置的,如果我将 heightForRowAtIndexPath 设置为 500,则 imageview 是唯一会被拉伸的视图。

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 
        let image = comics[indexPath.row].image

        return image.size.height + 103

103 是构成单元格其余部分高度的点(按钮和标签)(见截图)。

现在的问题是:所有单元格都太高了!好像这还不够奇怪,其中一些太短了??? (图片)我读过很多类似的帖子,但没有一个回答我的问题。 不知何故,image.size.height 比 imageview 中的实际图像大? 我只希望 uiimageview 在 AspectFit 模式下与其中的图像大小相同。

您对此有什么想法吗?如果您有任何进一步的问题,请问我! 谢谢! Screenshot

【问题讨论】:

所有单元格都有图像?你确定图像数组和 indexPath.row 的关系吗? 也许您需要使用比率 image.width/screen.width 计算图像高度? 是的,这个数组是数据源数组,我也用它来返回section中的行。 但是为什么这个比率很重要呢?图像视图(带有约束)固定在屏幕边缘 问题可能出在图像的分辨率上,打印每个单元格的大小以“调试”它,您可能必须使用纵横比,而不仅仅是高度。跨度> 【参考方案1】:

非常感谢你们!长宽比的东西做到了:

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 
        let image = comics[indexPath.row].image
        let aspectRatioImg = image.size.height / image.size.width

        return view.bounds.width * aspectRatioImg + 103
    

【讨论】:

以上是关于将 UITableViewCell 高度设置为 UIImage 高度?的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell 不显示我设置为约束的高度

如何使用 UILabel 的高度正确增加 UITableViewCell

如何设置默认的 UITableViewCell 高度?

根据 UITableViewCell 标签高度和宽度调整背景图片大小

AutoLayout根据children设置UITableViewCell的高度

根据 UILabel 的高度设置 UITableViewCell 的高度