我的 UIImageView 中的约束有啥问题,为啥我无法在 UIViewController 上拉伸图像?

Posted

技术标签:

【中文标题】我的 UIImageView 中的约束有啥问题,为啥我无法在 UIViewController 上拉伸图像?【英文标题】:what is wrong with constraints in my UIImageView and why I cannot stretch the image on my UIViewController?我的 UIImageView 中的约束有什么问题,为什么我无法在 UIViewController 上拉伸图像? 【发布时间】:2016-09-26 23:01:25 【问题描述】:

这是我目前的情况:

我有一个UIViewController,上面有UIImageView

后者有以下约束:trailing to superviewleading to superviewtop space to top layout guidewidth equals 320height equals 820

高度和宽度作为出口连接到我的班级,我将它们设置在viewDidLoad

@IBOutlet weak var imageHeightconstraint: NSLayoutConstraint!

@IBOutlet weak var imageWidthConstraint: NSLayoutConstraint!

@IBOutlet weak var backgroundImage: UIImageView!

override viewDidLoad()
    backgroundImage.af_setImageWithURL(NSURL(string: photoURL)!)
    imageHeightconstraint.constant = backgroundImage.image!.size.height
    imageWidthConstraint.constant = self.view.frame.size.width

现在,我的图像是这样的:

这是 480x640 像素的照片。我尝试在我的故事板中将模式设置为centerscale to fillaspect fillaspect fittop

例如,这是center

aspect fit:

aspect fill:

但是我不知道如何从左到右拉伸这张图片并保持纵横比,所以整张照片都是可见的,它的左右边缘贴在屏幕的左右边缘。 我认为这两个约束可以解决它:

imageHeightconstraint.constant = backgroundImage.image!.size.height
imageWidthConstraint.constant = self.view.frame.size.width

但它不起作用。也许问题是照片的分辨率很低(480x640),所以高度只有那么小?你能给我任何提示我该如何解决它吗?

【问题讨论】:

【参考方案1】:

要让图像贴在屏幕两侧并保持纵横比,请设置以下 4 个约束:

    ImageView 的前沿到 SuperView 的前沿。 ImageView 的后沿到 SuperView 的后沿。 ImageView 的顶部边缘到顶部布局指南底部。

    设置纵横比约束:ImageView Width 等于 ImageView Height 和 multiplier 480:640。要设置它,control-在 ImageView 中沿对角线拖动并从弹出窗口中选择 Aspect Ratio。然后将乘数改为480:640

将图片的内容模式设置为Scale to fill

【讨论】:

【参考方案2】:

您可能不会拨打setNeedsLayout(),然后拨打layoutIfNeeded()

为了更新 UI,您需要告诉视图更新,而不仅仅是更改约束。

无论哪种方式,如果您希望 imageView 始终填满屏幕,并且您不应该在 ImageView 上设置高度/宽度,只能拥抱两侧。还要确保这些约束忽略了边距。

如果您希望图像填充 imageView,请将调整大小模式设置为 aspectFill,如果您希望它调整大小直到左/右或上/下到达视图的边缘,aspectFit 就是您所需要的需要。

【讨论】:

以上是关于我的 UIImageView 中的约束有啥问题,为啥我无法在 UIViewController 上拉伸图像?的主要内容,如果未能解决你的问题,请参考以下文章

嵌入在 UIScrollView (SWIFT) 中的 UIImageView 的约束问题

无法使用 uiimageview 同时满足 uitableviewcell 中的约束

替换 UIlabel 代替 UIImageView 而不删除 interfacebuilder 中的约束

使用约束为全屏 UIImageView 设置动画

UIImageView 创建额外的宽度/高度约束

如何使用 UIImageView 和单元格中的多个标签正确地进行约束?