Какао Autolayout - Почему я не могу удалить или изменить (фиолетовое) ограничение ширины для текстового поля? - PullRequest
17 голосов
/ 02 января 2012

Я создаю простое приложение, используя autolayout, и столкнулся со странной ситуацией. Я помещаю текстовое поле в пустую часть большого открытого представления, чтобы на него не влияло ничего, кроме суперпредставления, но когда я пытаюсь изменить ограничение «Ширина», чтобы оно было> = вместо ==, оно создает новое ограничение и отказывается модифицировать старый. Я не могу удалить его или изменить какие-либо его атрибуты, потому что он просто создает новый.

Вот сравнение двух ограничений: фиолетовый - упрямый, а синий - только что созданный.

Constraint comparison

Почему фиолетовый округлый не модифицируется?

Ответы [ 5 ]

17 голосов
/ 01 июля 2012

Я обошел вокруг наличия неустранимых, но нежелательных ограничений в IB, установив их приоритет 1. Не похоже, что это правильно, но иногда я недостаточно умен, чтобы быть разработчиком Какао.

11 голосов
/ 08 января 2012

Моя проблема была связана с тем, что не было добавлено достаточно других ограничений, что ширина будет вынуждена когда-либо меняться. Когда я добавил больше других ограничений (таких как начальное и конечное пространство), я смог изменить фиолетовое ограничение (фактически оно исчезло, и мне пришлось добавить свое собственное).

Кажется странным, что вы не можете добавить свои собственные ограничения, если не существует вероятность того, что они будут нарушены, но я полагаю, что в некоторых случаях это так и было встроено в IB.

6 голосов
/ 27 сентября 2012

Понижение приоритета фиолетовых ограничений также сделает их редактируемыми.

2 голосов
/ 28 июня 2013

У меня был похожий сценарий, где было две многострочные метки.В зависимости от размера контента, оба должны изменить размер.

Two multiline labels

Когда размер первой метки изменился, вторая метка перезаписывалась, поскольку вторая имела ограничение по вертикали («Top Space to SuperView = 40». Это системное значение по умолчанию)ограничение - фиолетовый цвет), который я не смог удалить / изменить.

Если бы я попытался изменить его как «Top Space to SuperView> = 40», оно было бы изменено на пользовательское ограничение (синий цвет), а новое фиолетовое ограничение «Top Space to SuperView = 40»быть создан автоматически.

Полагаю, это может быть причиной:

Когда я попытался изменить ограничение на "Top Space to SuperView> = 40", позиция метки по умолчанию не определена:> = не указывает позицию по умолчанию .Он определяет только « диапазон позиций ».Затем я добавил новое ограничение, выбрав обе метки вместе и установив пространство между ними как константу.adding constraint between two labels

Теперь, поскольку первая метка имела определенную позицию (вертикальное пространство = 15) от верхней границы, а вторая метка находилась на 5 пунктов ниже первой, вторая метка получила определенную вертикальную позицию.Мне удалось удалить фиолетовое вертикальное ограничение пространства.

Теперь, если я уберу ограничение между двумя метками, у второй больше не будет определенной позиции, и система автоматически создаст фиолетовое ограничение для метки.

0 голосов
/ 07 мая 2013

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

...