使用UIImageView自动布局不会保留帧大小

时间:2014-11-16 01:21:35

标签: ios swift uiimageview autolayout

我想以编程方式实现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))

1 个答案:

答案 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))