Подтвердить что ты не робот

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

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

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

Constraint comparison

Почему пурпурный округлый не модифицируемый?

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

Two multiline labels

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

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

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

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

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

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

Ответ 5

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