UIImageView不遵循我应用的约束

时间:2016-04-12 23:14:35

标签: ios swift

我有一个名为infoView的父母。它有两个孩子:subLabeltinyImageView。我希望这两个孩子的大小都是30.0,首先是subLabel,然后是10像素填充,然后是tinyImageView。

出于某种原因,我的tinyImageView不遵守我下面提到的任何约束。即使高度/宽度也不受尊重。

let boxSize = infoView.frame.size.height //30
let subLabel = UILabel()
subLabel.frame = CGRectMake(0, 0, boxSize, boxSize)
subLabel.layer.cornerRadius = 5.0
subLabel.clipsToBounds = true
subLabel.backgroundColor = logoColor(1)
subLabel.text = String(post.subscribers)
subLabel.font = UIFont(name: "Lato-Bold", size: 13.0)
subLabel.textColor = UIColor.whiteColor()
subLabel.textAlignment = .Center
infoView.addSubview(subLabel)

//Image

let tinyImageView = UIImageView(image:UIImage(named: "MO.jpg"))
tinyImageView.layer.cornerRadius = 2.5
tinyImageView.clipsToBounds = true
infoView.addSubview(tinyImageView)

let widthConstraint = NSLayoutConstraint(item: tinyImageView, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: boxSize)
tinyImageView.addConstraint(widthConstraint)

let heightConstraint = NSLayoutConstraint(item: tinyImageView, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: boxSize)
tinyImageView.addConstraint(heightConstraint)

print("------------")
let horizontalConstraint = NSLayoutConstraint(item: subLabel, attribute: NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: tinyImageView, attribute: NSLayoutAttribute.Leading, multiplier: 1, constant: 10)
infoView.addConstraint(horizontalConstraint)

let verticalConstraint = NSLayoutConstraint(item: subLabel, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: tinyImageView, attribute: NSLayoutAttribute.CenterY, multiplier: 1, constant: 0)
verticalConstraint.active = true

图像太大了,水平/垂直约束根本不起作用。目前,图像与subLabel重叠,好像刚刚添加时没有任何约束。

2 个答案:

答案 0 :(得分:0)

正如@ Paulw11在评论中所述,您需要将translatesAutoResizingMaskIntoConstraints设置为false以获得以编程方式创建的视图。此外,您的约束会调整UIImageView的框架大小,但它们不会缩放图像。为此,您需要设置contentMode属性:

tinyImageView.translatesAutoResizingMaskIntoConstraints = false
tinyImageView.contentMode = .ScaleToFill

contentMode您可能要考虑的值为.ScaleToFill(根据需要缩放以适应区域扭曲的宽高比),.ScaleAspectFit(保持宽高比并将视图的一部分保持为透明如有必要)和.ScaleAspectFill(如有必要,保持纵横比和图像的一部分)。

答案 1 :(得分:0)

从您的代码中,我刚看到一个激活约束verticalConstraint

激活您添加的所有约束。

如果您的约束发生冲突, 将translatesAutoResizingMaskIntoConstraints设置为false(通常如果以编程方式设置约束,则将其设置为false)