我想以编程方式实现UIImageView
,但是当我应用自动布局限制时,它的工作方式与我的预期不符。为简单起见,我将图像视图的帧设置为100 x 100.这很有效,但是一旦我添加了自动布局约束,就不再遵循帧大小并且图像以其完整大小呈现(在这种情况下,320px宽)而不是按比例缩小以适应图像视图帧。
为什么会这样,我怎样才能获得所需的行为?我想要一个100x100的图像视图,它可以根据纵横比缩小图像,并且位于距屏幕中间居中的底部50处。
let imageView = UIImageView(frame: CGRectMake(0, 0, 100, 100))
imageView.image = UIImage(named: "myimg")
imageView.contentMode = .ScaleAspectFit
imageView.clipsToBounds = true
imageView.setTranslatesAutoresizingMaskIntoConstraints(false)
self.view.addSubview(imageView)
self.view.addConstraint(NSLayoutConstraint(item: imageView, attribute: .Bottom, relatedBy: .Equal, toItem: self.view, attribute: .Bottom, multiplier: 1, constant: -50))
self.view.addConstraint(NSLayoutConstraint(item: imageView, attribute: .CenterX, relatedBy: .Equal, toItem: self.view, attribute: .CenterX, multiplier: 1, constant: 0))
答案 0 :(得分:6)
使用自动布局时,不应设置任何帧。您需要为图像视图的宽度和高度添加两个约束。
let imageView = UIImageView()
// your other code here
imageView.addConstraint(NSLayoutConstraint(item: imageView, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 100))
imageView.addConstraint(NSLayoutConstraint(item: imageView, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 100))