以编程方式将现有约束复制到新对象

时间:2015-10-29 20:27:31

标签: ios swift constraints nslayoutconstraint

我允许用户在按下按钮时创建新的文本字段。我想以编程方式从现有文本字段中复制前导和尾随约束。我的代码:

 @IBAction func addAnotherTextField(sender: AnyObject) {



    let newTextField = UITextField.init(frame: CGRectMake(20, positionY, self.view.frame.size.width-40, 30))
    newTextField.delegate = self
    newTextField.tag = fieldCount
    newTextField.placeholder = "You created this!"
    newTextField.borderStyle = UITextBorderStyle.RoundedRect

    newTextField.translatesAutoresizingMaskIntoConstraints = false

    let leadingConstraint = NSLayoutConstraint(item: newTextField, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: nameTextField, attribute: NSLayoutAttribute.Leading, multiplier: 1, constant: 0)

    let trailingConstraint = NSLayoutConstraint(item: newTextField, attribute: NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: nameTextField, attribute: NSLayoutAttribute.Leading, multiplier: 1, constant: 0)

    newTextField.addConstraint(leadingConstraint)
    newTextField.addConstraint(trailingConstraint)

    view.addSubview(newTextField)


    fieldCount++
    positionY = positionY + 15 + newTextField.frame.size.height



}

}

不幸的是,上面的代码在运行时崩溃了。

1 个答案:

答案 0 :(得分:0)

首先需要添加子视图,然后才能添加约束。 您无法在不相关的UIView之间连接约束...

来自文档:

  

<强>讨论:   约束必须仅涉及接收视图范围内的视图。具体而言,涉及的任何视图必须是接收视图本身或接收视图的子视图。添加到视图的约束被认为由该视图保存。评估约束时使用的坐标系是保存约束的视图的坐标系。