Tôi thêm UILabel
(số tiền nhãn) vào UIViewController
trong trình chỉnh sửa bảng phân cảnh. Và sau đó trong tập tin nhanh chóng, viewDidLoad
, tôi lập trình tạo một UITextField
(paymentTextField) và cố gắng thêm một ràng buộc giữa amountLabel
và paymentTextField
. Đây là mã của tôi trong viewDidload
:Swift thêm ràng buộc theo chương trình
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])
Nhưng tôi nhận được một lỗi:
"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."
Có ai biết những gì là sai? amountLabel
được kéo trực tiếp vào chế độ xem trong bảng phân cảnh và "paymentTextField" được thêm theo chương trình vào cùng một chế độ xem. Tại sao họ không có tổ tiên chung?
Cảm ơn câu trả lời của bạn. Tôi không thể tìm ra cách để cung cấp cho AmountLabel và paymentTextField cùng một phụ huynh. Tôi đã kéo AmountLabel trong bảng phân cảnh và cha mẹ của nó phải là chế độ xem bên ngoài. Tôi đã thêm paymentTextField lập trình vào self.view và cha mẹ của nó cũng phải là dạng xem bên ngoài. Làm thế nào họ có cha mẹ khác nhau? – jimshicard
Bạn đã xác nhận rằng họ có cùng cha mẹ, như in paymentTextField.superview? Nếu không, chỉ cần kéo một IBOutlet từ khung nhìn bên ngoài kịch bản vào bộ điều khiển và sử dụng nó để thêm paymentTextField làm một khung nhìn con. Ngoài ra, hãy đảm bảo bạn đang thêm ràng buộc SAU cuộc gọi addSubview, không phải trước đó. – Pauls