Равная ширина и равное расстояние между кнопками в автозапуске
Я пытаюсь использовать ограничения автоопределения для автоматического изменения размера нескольких кнопок аналогичного размера, чтобы дать следующий эффект:
Перед изменением размера
![Before stretching]()
Желаемый эффект после изменения размера
![After stretching]()
Как вы можете сказать, я хочу, чтобы кнопки имели одинаковый размер, и я также хочу, чтобы расстояние между каждой кнопкой составляло 20 точек. Сначала это кажется довольно простым, поэтому я устанавливаю следующие ограничения:
- Кнопки: пробел из левого соседа = 20 (включая кнопки слева и справа)
- Кнопки: пространство от правого соседа = 20 (включая кнопки слева и справа)
- Кнопки: та же ширина
Что на самом деле происходит после изменения размера
![enter image description here]()
Когда в предварительном просмотре или когда я тестирую запуск приложения в своем iPhone/симуляторе, кнопка изменяет размер и даже не соответствует тому же ограничению ширины, которое я установил для него. Фактически, вид, содержащий виды, также изменяет размеры, чтобы они соответствовали новым размерам кнопок. Кто-нибудь знает, как исправить эту проблему исключительно в построителе интерфейса?
Ответы
Ответ 1
Настройка:
- равная ширина всех кнопок
- горизонтальный интервал между всеми кнопками
- ведущий для просмотра первой кнопки и трейлинг для просмотра последней кнопки
должен выполнять эту работу. Если у вас не возникли проблемы с супервидом (например, отсутствующие ограничения ScrollView)
Ответ 2
В построителе интерфейса вы устанавливаете ограничения расстояния между кнопками, как описано выше. Затем вы можете выполнить команду - выбрать все из них и указать ограничение "Равная ширина" для применения к выбранным объектам.
Ответ 3
Наконец, я забвение, как решить эту проблему. Я проверяю, что это работает как шарм.
- добавить ограничения для элементов пространства с маркой 20 единиц.
- добавить ограничение возрастов
- теперь сложная часть
- для каждого элемента добавьте ограничение равной ширины в родительский
- выберите все новые ограничения и измените его свойства.
- установить множитель в значение
1:5
- установите константу в
-24
(6 разделение между элементами и родительским краем дает 120
, это умноженное на значение множителя 1:5
дает 24
)
- обновить фреймы элементов
Что это! Рисунок ниже показывает, как он работает в построителе интерфейса:
![результат построения интерфейса]()
Задайте имитируемый размер для "свободной формы" и проверьте разную ширину (я устанавливаю его на 330
).
Ответ 4
Эта проблема, по-видимому, связана с неправильными content hugging priority
и content compression Resistance priority
. Таким образом, вы должны установить их как низкое обтягивание содержимого и высокое сопротивление сжатию (все они должны иметь одинаковое значение).
Поскольку обнимание содержимого - это свойство, которое сопротивляется представлению для роста и сжатию содержимого. Устойчивость к сопротивлению - это противодействие виду, чтобы сжиматься. Для получения дополнительной информации об этом вы можете найти Question.