私はUITextFieldをプログラム的に制約しようとしていますが、「共通の祖先がないために項目を使用して制約をアクティブにできません。制約がさまざまなビュー階層の項目を参照していますか?UITextFieldをプログラムで制約すると、「共通の祖先がないため制約をアクティブ化できません」というエラーが発生します。
私は制約を有効にした場所(つまりconstraint.active = true)に問題を絞りました。しかし、私はどのように問題を解決するのか分かりません。
デバッグしようとしているうちに、私は以前の行で表示するためにtextFieldサブビューを追加しても、viewDidLoad()またはviewWillAppear()がtextField.superviewを印刷してもnilを返すことがわかりました。最後に、textFieldをCGRectで初期化するだけで、完全に動作します。制約を加えることはできません。
これは私に本当に困ってしまった。
class SignInController: UIViewController {
var emailField: UITextField {
let textField = UITextField()
textField.translatesAutoresizingMaskIntoConstraints = false
return textField
}
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(emailField)
setupEmailField()
print(view) //Returns <UIView: 0x7f93f6076510; frame = (0 0; 375 667); autoresize = W+H; layer = <CALayer: 0x7f93f607a8d0>>
print(emailField.superview) //Returns nil
}
// Breaks at this function
func setupEmailField() {
emailField.topAnchor.constraintEqualToAnchor(view.topAnchor, constant: 50).active = true
emailField.rightAnchor.constraintEqualToAnchor(view.rightAnchor, constant: -10).active = true
emailField.leftAnchor.constraintEqualToAnchor(view.leftAnchor, constant: 10).active = true
emailField.heightAnchor.constraintEqualToAnchor(view.heightAnchor, multiplier: 0.05).active = true
}
ありがとうございました!私はこれに数時間を費やしました... –