遅延ビューでインスタンス化されたテキストフィールドをプログラムで追加するときは、イニシャライザで削除するとクラッシュし、viewDidLoad()
で削除するとテキストフィールドは表示されません。遅延ビューのインスタンス化されたUIビューでサブビューを2回追加する必要があります
class VC: UIViewController {
override func viewDidLoad() {
view.addSubview(textField)
view.setNeedsUpdatedConstraints)
}
lazy var textField: UITextField! = {
let field = UITextField()
field.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(field)
field.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
field.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
field.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 0.8).isActive = true
field.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.1).isActive = true
return field
}()
}
viewDidLoad()
でview.addSubview(textField)
を削除すると、エラーが発生するが、何も現れません。初期化プログラムのview.addSubview(field)
を削除すると、次のエラーでクラッシュします。Unable to activate constraint with anchors <NSLayoutXAxisAnchor:0x600000469380 "UITextField:0x7fc931023600.centerX"> and <NSLayoutXAxisAnchor:0x600000469480 "UIView:0x7fc92f60c690.centerX"> because they have no common ancestor. Does the constraint or its anchors reference items in different view hierarchies? That's illegal.
両方の呼び出しが必要な理由は何ですか?これは問題を引き起こしますか?これを行う良い方法は何でしょうか?ありがとう。
'textField'はどこに宣言されていますか? – rmaddy
この例の変数名を変更するのを忘れてしまった、whoops –
イニシャライザで削除したときのエラーは何ですか?あなたの質問(コメントではない)にエラーを入れてください。 – rmaddy