Dans mon application de storyboard, j'essaie d'ajouter UITextField
supplémentaire à l'interface. Mais je reçois l'exception que dit le titre. J'utilise SwiftAutoLayout bibliothèque. Voici mon code:
// 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..."
}
}
Essayez d'ajouter passwordTextField
à sa vue d'ensemble avant de lui associer des contraintes.
[~ # ~] upd [~ # ~] (merci @vmeyer et @MacMark): veuillez noter qu'il est plus sûr d'ajouter des contraintes qui ne sont pas dans viewDidLoad
ou viewWillAppear
/viewDidAppear
mais dans pdateViewConstraints ou viewWillLayoutSubviews car la hiérarchie des vues peut ne pas être préparée pour cette opération.
Je vous suggère de ne pas ajouter de contraintes dans viewDidLoad, car la hiérarchie des vues est définie, mais pas les contraintes. Vous devriez préférer pdateViewConstraints ou viewWillLayoutSubviews
Vous essayez d'ajouter une contrainte à la vue qui n'est pas ajoutée/créée dans la hiérarchie de vues actuelle. Ajoutez d'abord la vue, puis appliquez la contrainte.