我的 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 superview
、leading to superview
、top space to top layout guide
、width equals 320
、height 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 像素的照片。我尝试在我的故事板中将模式设置为center
、scale to fill
、aspect fill
、aspect fit
和top
。
例如,这是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 中的约束