Я пытаюсь программно ограничить UITextField, но продолжаю получать ошибку: «Невозможно активировать ограничение с помощью элементов, потому что у них нет общего предка. Связаны ли ссылочные позиции ограничений в разных иерархиях представлений?».Ограничение UITextField программно приводит к ошибке «Невозможно активировать ограничение, потому что у них нет общего предка».
Я сузил проблему до того, где я активирую свое ограничение (т. Е. Constraint.active = true). Однако я не знаю, как исправить эту проблему.
При попытке отладки я обнаружил, что распечатывание textField.superview в моем представленииDidLoad() или viewWillAppear() сообщает о нуле, хотя я добавляю subview textField для просмотра в строке раньше. Наконец, если я просто инициализирую 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
}
Большое вам спасибо! Я потратил несколько часов на это ... –