视图层次结构不是为约束准备的

时间:2015-07-13 09:00:03

标签: ios swift autolayout constraints

我收到错误:

  

未为约束

准备视图层次结构

我运行下面的代码时遇到的每个约束,它位于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)
}

有人知道我做错了什么吗?
任何想法将不胜感激!

1 个答案:

答案 0 :(得分:1)

感谢roronoa zorro和pe60t0,我发现我应该在相关视图上执行此操作,而不仅仅是scrollview is (375.0, 356.5) ,所以:setTranslatesAutoresizingMaskIntoConstraints(false)
还应在创建视图时添加约束,因此我调用覆盖icon.setTranslatesAutoresizingMaskIntoConstraints(false)并将其添加到那里 最后,我应该将约束添加到superview,而不是我正在“制作约束”的视图。因此,我应该写layoutSubviews()而不是icon.addConstraint(top)