视图层次结构没有为约束准备好。

问题描述 投票:0回答:1

我得到一个错误。

视图层次结构没有为约束准备好。

当我运行下面的代码时,我的每一个约束条件都会被执行,这段代码位于 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)
}

有人知道我做错了什么吗?

ios swift autolayout constraints
1个回答
1
投票

感谢roronoa zorro和pe60t0,我弄明白了,而不是只用简单的 setTranslatesAutoresizingMaskIntoConstraints(false) 我应该在相关的观点上做文章,所以。icon.setTranslatesAutoresizingMaskIntoConstraints(false). 另外,约束条件应该在创建视图时添加,所以我调用覆盖--。layoutSubviews() 并将它们添加到那里。最后,我应该将约束添加到superview中,而不是添加到我 "为其制作约束 "的视图中。因此,我不使用 icon.addConstraint(top) 我应该写。self.addConstraint(top).

© www.soinside.com 2019 - 2024. All rights reserved.