获得例外:“无法设置与视图层次没有准备约束的布局”

在我的故事板应用程序中,我尝试添加额外的UITextField接口。 但是我得到了标题所说的例外。 我使用SwiftAutoLayout库。 这是我的代码:

 // MARK: - IBOutlets @IBOutlet weak var passwordTextField: UITextField! // MARK: - Properties let userIdTextField = UITextField() // MARK: - Lifecycle override func viewDidLoad() { super.viewDidLoad() self.passwordTextField.keyboardType = .NumberPad if getCurrentUserId() == nil { self.view.addSubview(userIdTextField) userIdTextField.setTranslatesAutoresizingMaskIntoConstraints(false) self.view.addConstraints([userIdTextField.al_leading == passwordTextField.al_leading, userIdTextField.al_trailing == passwordTextField.al_trailing, userIdTextField.al_top == passwordTextField.al_bottom + 8]) userIdTextField.placeholder = "Enter User Id..." } } 

在绑定任何约束之前,尝试将passwordTextField添加到其超级视图。


UPD (感谢@ vmeyer和@MacMark):请注意,添加约束不是在viewDidLoadviewWillAppear / viewDidAppear而是在updateViewConstraints或viewWillLayoutSubviews中更安全,因为视图层次结构可能对此操作没有准备。

我build议你不要在viewDidLoad中添加约束,因为视图层次被设置,而不是约束。 您应该更喜欢updateViewConstraints或viewWillLayoutSubviews