//MARK: NSLayoutConstraints
//trailing
let trailingConstaint = NSLayoutConstraint(item: imageView, attribute: .trailing, relatedBy: .equal, toItem:imageView.superview , attribute: .trailing, multiplier: 1, constant: 0)
trailingConstaint.isActive = true
//leading
let leadingConstraint = NSLayoutConstraint(item: imageView, attribute: .leading, relatedBy: .equal, toItem: imageView.superview, attribute: .leading, multiplier: 1, constant: 0)
leadingConstraint.isActive = true
//top
let topConstraint = NSLayoutConstraint(item: image, attribute: .top, relatedBy: .equal, toItem: imageView.superview, attribute: .top, multiplier: 1, constant: 0)
topConstraint.isActive = true
//bottom
let bottomConstraint = NSLayoutConstraint(item: imageView, attribute: .bottom, relatedBy: .equal, toItem: imageView.superview, attribute: .bottom, multiplier: 1, constant: 0)
bottomConstraint.isActive = true
我想调整图像的大小以使其适合以便正确缩放图像 screenshot of ViewController
但是我得到了这个错误..
由于未捕获的异常而终止应用 'NSInvalidArgumentException',原因:'NSLayoutConstraint for 大小{746,496}方向0比例 1.000000:约束项必须都是UIView或UILayoutGuide的实例。'
答案 0 :(得分:3)
//top
let topConstraint = NSLayoutConstraint(item: image, attribute: .top, relatedBy: .equal, toItem: imageView.superview, attribute: .top, multiplier: 1, constant: 0)
topConstraint.isActive = true
您要将此约束设置为图像,而不是 imageView 。
该例外明确指出Constraint items must each be an instance of UIView, or UILayoutGuide.'
所有其他约束都在 imageView 和 imageView.superView 之间设置,因此从逻辑上讲,上述约束也应使用相同的对。
这将处理异常。
//top
let topConstraint = NSLayoutConstraint(item: imageView, attribute: .top, relatedBy: .equal, toItem: imageView.superview, attribute: .top, multiplier: 1, constant: 0)
topConstraint.isActive = true
但是,约束无法实现图像缩放。您必须适当地设置 contentMode 属性。检查well-explained docs.
中的了解图像缩放方式部分答案 1 :(得分:1)
您的topConstraint中似乎引用了图片而不是 imageView 。 如果没有看到更多的代码,但很难确定,但尝试更新它,看看它是否有效。
let topConstraint = NSLayoutConstraint(item: imageView, attribute: .top, relatedBy: .equal, toItem: imageView.superview, attribute: .top, multiplier: 1, constant: 0)
topConstraint.isActive = true
答案 2 :(得分:0)
在您的第三个约束中,您使用了image
而不是imageView
。您无法仅对视图设置图像约束。看看你如何设置imageView
。
您是否有理由不在Interface Builder中设置约束?他们非常直截了当。
您可以设置contentMode
的{{1}}属性,以确定图像的缩放方式。 UIImageView
通常是您想要的,但如果图像没有精确地适合视图,则会导致图像的一些裁剪。 scaleAspectFill
将确保显示整个图像,但如果图像大小与视图大小不匹配,则需要一些填充。 scaleAspectFit
将填充视图而不填充,可能会以扭曲图像为代价。