Как запретить построителю интерфейса добавлять 20-процентное дополнение к содержимому subview?
![IB, stop adding that padding!]()
Посмотрите, что 20px (pt довольно) отступов? IB делает это автоматически в двух случаях, когда вы нажимаете Cmd + =
, чтобы авторизовать супервизор, чтобы соответствовать содержимому subview, и когда вы выбираете Editor > Embed In > UIView, UIScrollView etc.
.
Позже это особенно раздражает, так как он берет то, что должно быть однократным сберегателем времени, и превращает его в перестановку с перестановкой, которая лишь незначительно лучше, чем это делает вручную, и теряя относительное позиционирование ВСЕХ подзонов при перетаскивании их в другое место в иерархии.
Также с опцией Embed In
IB сдвигает позиционирование новой обертки супервизора на (-20, -20), как будто это делает ее лучше...
Я что-то упустил? Есть ли способ предотвратить это дополнение?
Ответы
Ответ 1
Я наконец понял, как это сделать, связанный с этим ответом:
Групповые представления в Interface Builder
- Выберите все виды, которые вы хотите внедрить (с помощью сдвига или нажатия команды на них).
- Редактор- > Вставить In- > View. Это создает представление "A" с избыточным заполнением 20 пикселей.
- Создайте новый вид "B" с фактическими границами, которые вы хотите (таким образом, на 20 пикселей меньше, чем "A" со всех сторон).
- Перетащите старый вид контейнера "A" в новый вид контейнера "B" (Xcode центрирует его для вас в пределах "B", сохраняя текущие местоположения всех дочерних элементов).
- Нажмите на старый вид контейнера "A" и перейдите в редактор- > Unembed.
Теперь ваши дочерние элементы правильно размещены в представлении "B", и нет отступов 20 пикселей.
Протестировано в Xcode 4.5.
P.S. этот метод может быть особенно полезен, когда вы хотите иметь боковую панель и поддерживать как 3,5-дюймовые, так и 4-дюймовые дисплеи. Вы можете указать боковую панель и основной вид соответствующей авторазделения, а затем масштабировать подзоны по отношению к ним. У меня возникли проблемы с получением взглядов GLKit, чтобы уважать правила автосохранения, поэтому я настраивал обычные представления и встраивал в них взгляды GLKKit со всеми включенными красными автозапусками:
Неверный размер фрейма и размер рамки вложенного изображения GLKView
Ответ 2
Все, что вам нужно сделать, по крайней мере в Xcode 7.2, дает Container Просмотр следующих ограничений
Trailing Space to Superview = -20
Leading Space to Superview = -20
Ответ 3
Это то, что сработало для меня на Xcode 9. Обратите внимание, что таким образом вы потеряете ограничения верхнего представления, которое вы встраиваете. Итак, чтобы вставить один вид в другой:
- Создайте еще один пустой вид на том же уровне, что и представление, которое вы собираетесь внедрить.
- Расположите новое представление правильно и добавьте к нему ограничения.
SuperView. Я думаю, что в большинстве случаев вы хотите дублировать то же самое
ограничения, как у вас есть из существующего представления в супервизор.
- Затем выберите представление, которое необходимо вставить, и перетащите его под
новый вид. Теперь у вас есть свой взгляд, встроенный в новое представление.
То, что вам также нужно, - добавить 0 граничных ограничений из встроенного представления
к новому виду.
Что это.