0

如果我从情节提要添加视图,我可以通过代码处理它们的自动布局约束,但如果我在通过代码添加的视图上尝试此操作,则无法处理。

我在 viewDidLoad() 中调用下面的代码但不起作用,缺少什么部分?

    var testView = UIView()
    testView.backgroundColor = UIColor.greenColor()
    self.view.addSubview(testView)

    let views : [String : AnyObject] = ["testView": testView]
    var allConstraints = [NSLayoutConstraint]()

    let verticalConstraint = NSLayoutConstraint.constraintsWithVisualFormat(
        "V:|-[testView(100)]",
        options: [],
        metrics: nil,
        views: views)
    allConstraints += verticalConstraint

    let horizontalConstraint = NSLayoutConstraint.constraintsWithVisualFormat(
        "H:|-[testView(200)]",
        options: [],
        metrics: nil,
        views: views)
    allConstraints += horizontalConstraint

    NSLayoutConstraint.activateConstraints(allConstraints)

ps:也尝试了这些行但没有帮助

    self.view.addConstraints(verticalConstraint)
    self.view.addConstraints(horizontalConstraint)
4

1 回答 1

2

您需要关闭将自动调整大小的掩码转换为约束。默认情况下,它设置为true,如果您倾向于忘记这一点,它将添加您不打算添加的约束。

您可以通过以下方式将其设置为 false

var myView = UIView()
myView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(myView)

将AutoresizingMask 转换为约束

如果此属性的值为 YES,系统将创建一组约束,这些约束复制由视图的自动调整大小掩码指定的行为。默认情况下,对于您以编程方式创建的任何视图,该属性都设置为 YES。如果在 Interface Builder 中添加视图,系统会自动将此属性设置为 NO。

于 2015-12-31T09:42:28.663 回答