我有一个带有垂直 UIStackView 的 UITableViewCell,它当前具有 .alignment = fill 和 distribution = fill。在堆栈 View 中,我有一个 UILabel 和一个 UIImageView。
标签应该左对齐并在堆栈 View 的宽度上拉伸(stretch)(确实如此)。 ImageView 具有纵横匹配的内容模式,应该在堆栈 View 的中间居中。我认为这是按照我想要的方式工作,直到我在 UIImageView 上设置背景颜色,然后意识到虽然图像本身看起来是正确的(缩放和居中),但 View 本身延伸到 stackview 的整个宽度(就像标签一样)做)。
是否可以让标签拉伸(stretch)堆栈 View 的宽度而不是 ImageView 的宽度?理想情况下,我希望 ImageView 只是缩放图像的大小,而不是一直延伸到堆栈 View 的边缘。
最佳答案
进行这些更改:
.center
而不是 .fill
。 class MyCell: UITableViewCell {
@IBOutlet private var myImageView: UIImageView!
private var imageViewAspectConstraint: NSLayoutConstraint?
func setImage(_ image: UIImage) {
myImageView.image = image
imageViewAspectConstraint?.isActive = false
imageViewAspectConstraint = myImageView.widthAnchor.constraint(
equalTo: myImageView.heightAnchor,
multiplier: image.size.width / image.size.height)
imageViewAspectConstraint!.isActive = true
}
}
请注意,由于单元格可以重复使用,因此您还必须删除先前的纵横比约束(如果有)。我发布的代码使用
imageViewAspectConstraint
来保存约束并在图像更改时将其删除。关于ios - 防止垂直 UIStackView 拉伸(stretch) subview ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52650210/