我有一个带有垂直 UIStackView 的 UITableViewCell,它当前具有 .alignment = fill 和 distribution = fill。在堆栈 View 中,我有一个 UILabel 和一个 UIImageView。

ios - 防止垂直 UIStackView 拉伸(stretch) subview ?-LMLPHP

标签应该左对齐并在堆栈 View 的宽度上拉伸(stretch)(确实如此)。 ImageView 具有纵横匹配的内容模式,应该在堆栈 View 的中间居中。我认为这是按照我想要的方式工作,直到我在 UIImageView 上设置背景颜色,然后意识到虽然图像本身看起来是正确的(缩放和居中),但 View 本身延伸到 stackview 的整个宽度(就像标签一样)做)。

是否可以让标签拉伸(stretch)堆栈 View 的宽度而不是 ImageView 的宽度?理想情况下,我希望 ImageView 只是缩放图像的大小,而不是一直延伸到堆栈 View 的边缘。

最佳答案

进行这些更改:

  • 将堆栈 View 的对齐方式设置为 .center 而不是 .fill
  • 将标签的宽度限制为等于堆栈 View 的宽度。
  • 在代码中,当您设置 ImageView 的图像时,还要在 ImageView 上创建纵横比约束,如下所示:
    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/

    10-10 21:04
    查看更多