Краткая версия: Создание ограничения NSLayoutAttributeCenterX
всегда вызывает сбой ограничения. Зачем?AutoLayout: Центрирование двух представлений в коде вызывает исключение ограничения?
У меня есть подкласс UITextField
, который ведет себя как текстовое поле поиска. Вы нажимаете на поле и появляется список элементов, элементы фильтруются по типу. Как это:
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 текстовое поле на контроллере представления :
Почему это вызывает ограничение ошибку?
Продолжая расследование: это, по-видимому, связано с тем фактом, что textField центрируется по горизонтали в своем супервизоре. Я до сих пор не понимаю, почему это имеет значение. Список должен располагаться на текстовом поле, textField должен располагаться над надстройкой. Я не вижу, как они взаимоисключающие. – memmons
В консоли, перед тем, как «Будет пытаться восстановить ..», вы должны были увидеть список всех соответствующих ограничений. Pls скопируйте/вставьте это в свой вопрос. –