我有一个名为infoView
的父母。它有两个孩子:subLabel
和tinyImageView
。我希望这两个孩子的大小都是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
重叠,好像刚刚添加时没有任何约束。
答案 0 :(得分:0)
正如@ Paulw11在评论中所述,您需要将translatesAutoResizingMaskIntoConstraints
设置为false
以获得以编程方式创建的视图。此外,您的约束会调整UIImageView
的框架大小,但它们不会缩放图像。为此,您需要设置contentMode
属性:
tinyImageView.translatesAutoResizingMaskIntoConstraints = false
tinyImageView.contentMode = .ScaleToFill
contentMode
您可能要考虑的值为.ScaleToFill
(根据需要缩放以适应区域扭曲的宽高比),.ScaleAspectFit
(保持宽高比并将视图的一部分保持为透明如有必要)和.ScaleAspectFill
(如有必要,保持纵横比和图像的一部分)。
答案 1 :(得分:0)
从您的代码中,我刚看到一个激活约束verticalConstraint
。
激活您添加的所有约束。
如果您的约束发生冲突,
将translatesAutoResizingMaskIntoConstraints
设置为false
(通常如果以编程方式设置约束,则将其设置为false)