如何调整 UIImageView 的大小并强制重新布局父 UITableViewCell

Posted

技术标签:

【中文标题】如何调整 UIImageView 的大小并强制重新布局父 UITableViewCell【英文标题】:How to resize a UIImageView and force relayout of the parent UITableViewCell 【发布时间】:2015-11-24 02:22:55 【问题描述】:

我有具有 UITableViewAutomaticDimension 的自定义 TableViewCell。当我将图像加载到单元格中时,它几乎总是对于图像来说太高了,我最终会在图像上方和下方出现大白条。我正在尝试做的是将 UIImageView 调整为与图像相同的大小,但没有任何效果。

我也尝试创建一个新的 UIImageView 并进行设置,但 UIImageView.init(frame: CGRectMake(...) ) 出于某种原因返回 nil。我的 Google-fu 在这方面让我失望了。

我用于(尝试)调整 imageView 和父单元格大小的代码:(请注意,i 是我的新图像,cell.postImageIBOutlet 类型的 UIImageView!

let oFrame = cell.postImage.frame
let width = oFrame.width
let height = (i.size.height / i.size.width) * width
cell.postImage.frame = CGRectMake(oFrame.origin.x, oFrame.origin.y, width, height)
cell.postImage.contentMode = .ScaleAspectFit
cell.postImage.image = i
cell.setNeedsUpdateConstraints()
cell.setNeedsLayout()
cell.layoutIfNeeded()

【问题讨论】:

你对 postImage 有什么限制?一般来说,使用自动布局时不建议设置框架。相反,最好自己设置约束。 @beyowulf 我有与my question from last week 相同的限制 - 您可以在我的屏幕截图底部观察图像顶部边缘上方的条形。基本上它被限制在超级视图的顶部和内容标签的底部。 什么决定了单元格的高度,padding+图片高度+padding+标签高度+padding? @beyowulf 是的,这是正确的。如果没有图像,UIImageView 应该占用 0 空间。 它有固定的纵横比还是固定的宽度? 【参考方案1】:

为 postImage 设置宽度约束。为 postImage 的高度约束创建一个 IBOutlet。然后说:

let oFrame = cell.postImage.frame
let width = oFrame.width
let height = (i.size.height / i.size.width) * width
cell.postImageHeightConstraint.constant = height

看起来你想要图像中心所以对齐中心 x。

【讨论】:

我现在收到一条关于打破约束的错误消息,但它有效!我应该发布一个新问题还是您有什么想法?见pastebin.com/4Tg8rJj7 我认为您需要将图像视图的高度优先级设置为 999,但没有看到它我无法确定。 解决了所有问题。感谢您的帮助!

以上是关于如何调整 UIImageView 的大小并强制重新布局父 UITableViewCell的主要内容,如果未能解决你的问题,请参考以下文章

UIImageView 子类需要处理调整大小

UIImage 调整大小并裁剪以适合

如何调整 UIView 的大小并强制其子视图调整大小

在 UITableViewCell 中调整 UIImageView 的大小

无法让 UIImageView 调整大小以适应屏幕

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