2013-03-22 2 views
1

Краткая версия: Создание ограничения NSLayoutAttributeCenterX всегда вызывает сбой ограничения. Зачем?AutoLayout: Центрирование двух представлений в коде вызывает исключение ограничения?

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

enter image description here

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

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

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

Will attempt to recover by breaking constraint NSLayoutConstraint:0x9a5e1a0 UIView:0x9a5ba40.centerX == SearchTextField:0x7154a40.centerX

Для тестирования я сделал свою сцену как можно более простым - 1 текстовое поле на контроллере представления :

enter image description here

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

+0

Продолжая расследование: это, по-видимому, связано с тем фактом, что textField центрируется по горизонтали в своем супервизоре. Я до сих пор не понимаю, почему это имеет значение. Список должен располагаться на текстовом поле, textField должен располагаться над надстройкой. Я не вижу, как они взаимоисключающие. – memmons

+1

В консоли, перед тем, как «Будет пытаться восстановить ..», вы должны были увидеть список всех соответствующих ограничений. Pls скопируйте/вставьте это в свой вопрос. –

ответ

0

Вы не нашли ни одного setTranslatesAutoresizingMaskIntoConstraints:?

+0

Я попытался установить его в «НЕТ» в подклассе «UITextField» и в созданном представлении списка. Не было никакой разницы. Я, очевидно, не могу установить его в корневом представлении для сцены, хотя, поскольку установка его из подвью будет, конечно, плохая идея. – memmons