AutoLayout: центрирование двух представлений в коде вызывает исключение ограничения?

Краткая версия: создание ограничения NSLayoutAttributeCenterX всегда приводит к сбою ограничения. Почему?

У меня есть подкласс UITextField, который ведет себя как текстовое поле поиска. Вы нажимаете на поле, и появляется список элементов, элементы отфильтрованы по тому, что вы вводите. Как это:

введите здесь описание изображения

Подкласс UITextField отвечает за создание и отображение представления элементов. Центр списка должен соответствовать центру текстового поля. Итак, я установил свое ограничение следующим образом:

NSLayoutConstraint *hugCenter = 
   [NSLayoutConstraint constraintWithItem:self.searchContainerView
                                attribute:NSLayoutAttributeCenterX
                                relatedBy:NSLayoutRelationEqual
                                   toItem:self
                                attribute:NSLayoutAttributeCenterX
                               multiplier:1.0
                                 constant:0.0];

Это неизменно приводит к ошибке:

Попытается восстановиться, нарушив ограничение NSLayoutConstraint:0x9a5e1a0 UIView:0x9a5ba40.centerX == SearchTextField:0x7154a40.centerX

Для тестирования я максимально упростил свою сцену — 1 текстовое поле на контроллере представления:

введите здесь описание изображения

Почему это вызывает ошибку ограничения?


person memmons    schedule 22.03.2013    source источник
comment
Продолжаем исследовать: похоже, это связано с тем, что textField центрирован горизонтально в своем супервизоре. Я до сих пор не понимаю, почему это должно иметь значение. Список должен быть сосредоточен на текстовом поле, текстовое поле должно быть сосредоточено на суперпредставлении. Я не вижу, как они взаимоисключающие.   -  person memmons    schedule 23.03.2013
comment
В консоли, прямо перед тем, как Уилл попытается восстановить..., вы должны были увидеть список всех соответствующих ограничений. Пожалуйста, скопируйте/вставьте это в свой вопрос.   -  person Firoze Lafeer    schedule 23.03.2013


Ответы (1)


Вы где-то пропустили setTranslatesAutoresizingMaskIntoConstraints:?

person fumoboy007    schedule 22.03.2013
comment
Я попытался установить его на NO в подклассе UITextField, а также в созданном представлении списка. Без разницы. Я, очевидно, не могу установить его в корневом представлении для сцены, поскольку установка его из подпредставления, безусловно, была бы плохой идеей. - person memmons; 23.03.2013