Ios 以编程方式约束UITextField会导致错误“;无法激活约束,因为它们没有共同的祖先。”;

Ios 以编程方式约束UITextField会导致错误“;无法激活约束,因为它们没有共同的祖先。”;,ios,swift,Ios,Swift,我试图以编程方式约束UITextField,但不断收到错误,“无法激活项约束,因为它们没有共同的祖先。约束是否引用不同视图层次结构中的项?” 我已将问题缩小到激活约束的位置(即constraint.active=true)。然而,我不知道如何解决这个问题 在尝试调试时,我发现在我的viewDidLoad()或ViewWillAspect()中打印textField.superview会返回一个零,即使我在前面的行中添加了要查看的textField子视图。最后,如果我只是用CGRect初始化tex

我试图以编程方式约束UITextField,但不断收到错误,“无法激活项约束,因为它们没有共同的祖先。约束是否引用不同视图层次结构中的项?”

我已将问题缩小到激活约束的位置(即constraint.active=true)。然而,我不知道如何解决这个问题

在尝试调试时,我发现在我的viewDidLoad()或ViewWillAspect()中打印textField.superview会返回一个零,即使我在前面的行中添加了要查看的textField子视图。最后,如果我只是用CGRect初始化textField,它就可以完美地工作。只是不能添加禁忌症

这件事让我很难堪

class SignInController: UIViewController {

var emailField: UITextField {
    let textField = UITextField()
    textField.translatesAutoresizingMaskIntoConstraints = false

    return textField
}

override func viewDidLoad() {
    super.viewDidLoad()

    view.addSubview(emailField)

    setupEmailField()

    print(view)   //Returns <UIView: 0x7f93f6076510; frame = (0 0; 375 667); autoresize = W+H; layer = <CALayer: 0x7f93f607a8d0>>
    print(emailField.superview)   //Returns nil

}

// Breaks at this function
func setupEmailField() {

    emailField.topAnchor.constraintEqualToAnchor(view.topAnchor, constant: 50).active = true
    emailField.rightAnchor.constraintEqualToAnchor(view.rightAnchor, constant: -10).active = true
    emailField.leftAnchor.constraintEqualToAnchor(view.leftAnchor, constant: 10).active = true
    emailField.heightAnchor.constraintEqualToAnchor(view.heightAnchor, multiplier: 0.05).active = true

}
类签名控制器:UIViewController{
var emailField:UITextField{
设textField=UITextField()
textField.translatesAutoResizezingMaskintoConstraints=false
返回文本字段
}
重写func viewDidLoad(){
super.viewDidLoad()
view.addSubview(emailField)
setupEmailField()
打印(查看)//返回
print(emailField.superview)//返回nil
}
//在这个函数处中断
func setupEmailField(){
emailField.topAnchor.constraintEqualToAnchor(view.topAnchor,常量:50)。active=true
emailField.rightAnchor.constraintEqualToAnchor(view.rightAnchor,常量:-10)。active=true
emailField.leftAnchor.constraintEqualToAnchor(view.leftAnchor,常量:10)。active=true
emailField.heightAnchor.constraintEqualToAnchor(view.heightAnchor,乘数:0.05)。active=true
}

您忘记将
()
添加到
电子邮件字段
声明的末尾,因此您创建了一个计算属性,每次引用该属性时都会返回一个新的、不同的
UITextField
。您想要:

var emailField: UITextField {
    let textField = UITextField()
    textField.translatesAutoresizingMaskIntoConstraints = false
    return textField
}()

您忘记将
()
添加到
电子邮件字段
声明的末尾,因此您创建了一个计算属性,每次引用该属性时都会返回一个新的、不同的
UITextField
。您想要:

var emailField: UITextField {
    let textField = UITextField()
    textField.translatesAutoresizingMaskIntoConstraints = false
    return textField
}()