【问题标题】:How to resize a UIImageView and force relayout of the parent UITableViewCell如何调整 UIImageView 的大小并强制重新布局父 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 空间。
  • 它有固定的纵横比还是固定的宽度?

标签: ios swift uitableview uiimageview


【解决方案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,但没有看到它我无法确定。
  • 解决了所有问题。感谢您的帮助!
猜你喜欢
  • 2012-06-01
  • 2015-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-07
  • 2015-08-02
  • 2014-07-14
相关资源
最近更新 更多