Cocoa Autolayout - Почему я не могу удалить или изменить ограничение ширины (фиолетового) в текстовом поле?
Я создаю простое приложение, использующее автозапуск, и я столкнулся с странной ситуацией. Я помещаю текстовое поле в пустую часть большого открытого вида, поэтому на него не влияет ничего, кроме супер-представления, но когда я пытаюсь изменить ограничение "Ширина" как >= вместо ==, оно создает новое ограничение и отказывается изменять старый. Я не могу удалить его или изменить любые его атрибуты, потому что он просто создает новый.
Вот сравнение двух ограничений, фиолетовый - упрямый, а синий - вновь созданный.
![Constraint comparison]()
Почему пурпурный округлый не модифицируемый?
Ответы
Ответ 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
При щелчке правой кнопкой мыши по ограничению выберите "Содействовать ограничению пользователя". В следующий раз, когда вы нажмете на ограничение, вы сможете удалить его, поскольку теперь он находится в руках пользователя/разработчика.