ストーリーボードアプリケーションで、インターフェイスに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に感謝):viewDidLoad
にない制約を追加する方が安全であることに注意してくださいviewWillAppear
/viewDidAppear
ただし、 pdateViewConstraints または viewWillLayoutSubviews にあります。これは、この操作に対してビュー階層が準備されていない可能性があるためです。
ビュー階層は設定されていますが、制約は設定されていないため、viewDidLoadに制約を追加しないことをお勧めします。 pdateViewConstraints または viewWillLayoutSubviews をお勧めします
現在のビュー階層で追加/作成されていない制約をビューに追加しようとしています。最初にビューを追加してから、制約を適用します。