ストーリーボードエディタでUIViewController
にUILabel
(amountLabel)を追加します。そして、迅速なファイルviewDidLoad
で、UITextField
(paymentTextField)をプログラムで作成し、amountLabel
とpaymentTextField
の間に制約を追加しようとしました。プログラムでスウィート加算制約を追加
let paymentTextField = UITextField()
paymentTextField.translatesAutoresizingMaskIntoConstraints = false
paymentTextField.frame = CGRectMake(15, 100, CGRectGetWidth(self.view.frame) - 30, 44)
self.view.addSubview(paymentTextField)
let bottonConstraint = NSLayoutConstraint(item: paymentTextField, attribute: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Equal, toItem: self.amountLabel , attribute: NSLayoutAttribute.Top, multiplier: 1, constant: 30)
bottonConstraint.identifier = "paymentTextFieldSpacing"
NSLayoutConstraint.activateConstraints([bottonConstraint])
しかし、私はエラーを取得する:ここに私のコードはviewDidload
である
"Terminating app due to uncaught exception 'NSGenericException', reason: 'Unable to activate constraint with items > and > because they have no common ancestor. Does the constraint reference items in different view hierarchies? That's illegal."
誰が間違っているものを知っていますか? amountLabel
はストーリーボードのビューに直接ドラッグされ、同じビューにプログラムによって「paymentTextField」が追加されます。なぜ彼らは共通の祖先を持っていないのですか?
ご回答ありがとうございます。私はamountLabelとpaymentTextFieldに同じ親を与える方法を理解できませんでした。私はストーリーボードでamountLabelをドラッグし、その親は外側のビューでなければなりません。 self.viewにpaymentTextFieldをプログラムで追加し、その親も外部ビューである必要があります。どのように彼らは異なる親を持っていますか? – jimshicard
paymentTextField.superviewの印刷と同じ親を持っていることを確認しましたか?そうでない場合は、IBOutletをストーリーボードアウタービューからコントローラにドラッグし、それを使用してpaymentTextFieldをサブビューとして追加します。 また、addSubview呼び出しの後ではなく、制約を追加していることを確認してください。 – Pauls