在我的storyboard应用程序中,我尝试向界面添加额外的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..."
}
}
答案 0 :(得分:78)
尝试在绑定任何约束之前将passwordTextField
添加到其超级视图中。
UPD (感谢@vmeyer和@MacMark):请注意,添加不在viewDidLoad
或viewWillAppear
/ {{1}的约束更安全但是在updateViewConstraints或viewWillLayoutSubviews中,因为视图层次结构可能没有为此操作做好准备。
答案 1 :(得分:11)
我建议您不要在viewDidLoad中添加约束,因为视图层次结构已设置,但不是约束。 您应该更喜欢updateViewConstraints或viewWillLayoutSubviews
答案 2 :(得分:1)
您试图添加约束以在当前视图层次结构中未添加/创建的视图。首先添加视图,然后应用约束。
答案 3 :(得分:0)
在为超级视图中的视图添加约束之前,请先将该视图添加到超级视图中。
superView?.addSubview(view)
superView?.addConstraints([topConstraint,leftConstraint,bottomConstraint,rightConstraint])