我得到一个错误。
视图层次结构没有为约束准备好。
当我运行下面的代码时,我的每一个约束条件都会被执行,这段代码位于 UIView
类。
func addIcon(iconImage: UIImage) {
// Creating imageView
var icon = UIImageView()
icon.image = iconImage
icon.contentMode = .ScaleAspectFit
// Adding to self
self.addSubview(icon)
// Setting constraints
setTranslatesAutoresizingMaskIntoConstraints(false)
var leading = NSLayoutConstraint(
item: icon,
attribute: .Leading,
relatedBy: .Equal,
toItem: self,
attribute: .Leading,
multiplier: 1,
constant: 8)
icon.addConstraint(leading)
var centerY = NSLayoutConstraint(
item: icon,
attribute: .CenterY,
relatedBy: .Equal,
toItem: self,
attribute: .CenterY,
multiplier: 1,
constant: 0)
icon.addConstraint(centerY)
var top = NSLayoutConstraint(
item: icon,
attribute: .Top,
relatedBy: .GreaterThanOrEqual,
toItem: self,
attribute: .Top,
multiplier: 1,
constant: 8)
icon.addConstraint(top)
var bottom = NSLayoutConstraint(
item: icon,
attribute: .Bottom,
relatedBy: .GreaterThanOrEqual,
toItem: self,
attribute: .Bottom,
multiplier: 1,
constant: 8)
icon.addConstraint(bottom)
var width = NSLayoutConstraint(
item: icon,
attribute: .Width,
relatedBy: .Equal,
toItem: nil,
attribute: .NotAnAttribute,
multiplier: 1,
constant: 20)
icon.addConstraint(width)
}
有人知道我做错了什么吗?
感谢roronoa zorro和pe60t0,我弄明白了,而不是只用简单的 setTranslatesAutoresizingMaskIntoConstraints(false)
我应该在相关的观点上做文章,所以。icon.setTranslatesAutoresizingMaskIntoConstraints(false)
. 另外,约束条件应该在创建视图时添加,所以我调用覆盖--。layoutSubviews()
并将它们添加到那里。最后,我应该将约束添加到superview中,而不是添加到我 "为其制作约束 "的视图中。因此,我不使用 icon.addConstraint(top)
我应该写。self.addConstraint(top)
.