我有一个带有垂直UIStackView的UITableViewCell,当前具有.alignment =填充和distribution =填充。在堆栈视图中,我有一个UILabel和一个UIImageView。
标签应保持对齐并在stackview的宽度上延伸(确实如此)。图像视图具有宽高比适合的内容模式,应位于堆栈视图的中间。我以为这是我想要的,直到我在UIImageView上设置了背景色,然后才意识到,尽管图像本身看起来正确(缩放并居中),但视图本身却在整个stackview的整个宽度上延伸(就像标签一样)确实)。
是否可以使标签延伸堆栈视图的宽度,而不延伸图像视图的宽度?理想情况下,我希望图像视图只是缩放图像的大小,并且不一直延伸到堆栈视图的边缘。
答案 0 :(得分:1)
一种方法:
当用户在图像视图上轻按时,请评估轻按位置,并且只有在轻按位于高宽适合框内时才采取措施。
另一种方法:
UIImageView
嵌入水平居中的UILayoutGuide
UILayoutGuide
添加为堆栈视图的排列子视图这将使您的标签在堆栈视图(单元格)的整个宽度上伸展并使图像视图居中,从而使您可以检测到点击。
答案 1 :(得分:1)
进行以下更改:
.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
保存约束,并在图像更改时将其删除。