Встраивать представления в супер-просмотр без потери ограничений автоопределения

в приложении ios, У меня есть пользовательский UITableViewCell с большим количеством просмотров. Я использую автоматическую компоновку и настраиваю все ограничения по мере необходимости.

Но теперь мне нужно иметь основной вид (в представлении содержимого) и поместить в него все другие представления (какое-то родительское представление для всех).

Это пример того, как моя ячейка выглядит в построителе интерфейса:

enter image description here

у него есть все настройки представлений с ограничениями.

Я знаю, что есть функция xcode для встраивания выбранных представлений в родительский вид:

enter image description here

Итак, я выбираю все представление и выбираю, чтобы вставлять их в представление. Я получаю следующее:

enter image description here

Моя проблема

Хотя представления встроены правильно в супервизор, ограничение автоопределения было удалено, и теперь мне нужно их воссоздать.

Есть ли способ разместить все представления внутри супервизора и иметь те же ограничения автоопределения без необходимости их повторного создания? Спасибо вам

Ответы

Ответ 1

Как упоминалось в комментариях выше, этот подход хорошо работает для меня:

indiestack.com/2013/12/transplanting-constraints

Короче говоря, подход:

  • Дайте вашему старым супервизорам файл restoreId, чтобы вы могли легко идентифицировать его в XML.
  • Откройте XIB/Storyboard, с которым вы работаете, в текстовом редакторе.
  • Скопируйте и вставьте то, что в настоящее время находится в резервном файле.
  • Вставьте свой контент в новый супервизор, используя раскадровку. Не устанавливайте никаких новых ограничений.
  • Дайте вашему новому супервизору идентификатор восстановления, чтобы вы могли легко идентифицировать его в XML.
  • Откройте текущую раскадровку /XIB рядом со старой раскадрой /XIB, которую вы создали.
  • Найдите старый контейнер в резервном XML файле, выполнив поиск идентификатора восстановления. Скопируйте все внутри тегов <constraints></constraints> и <subviews></subviews>
  • Найдите новый вид контейнера в текущем XML и замените содержимое тегов <constraints></constraints> и <subviews></subviews> на скопированный контент
  • Перейдите в старый XML и скопируйте идентификатор старого контейнера.
  • Перейдите в новый XML и замените старый идентификатор, который вы получили на шаге 9, с идентификатором нового контейнера внутри <constraints></constraints>, который вы вставили.
  • Не забудьте добавить ограничения на новый контейнер, соответствующий старому контейнеру (в моем случае это привязало новый контейнер ко всем краям супер-представления).

Протест: Это сломает любые выходы на ограничения, которые вы, возможно, настроили. Выходы на другие вещи, виды и т.д. Будут в порядке.

Ответ 2

Вы когда-нибудь пытались просто создать ограничения вида контейнера? Вам не нужно воссоздавать все ограничения.

Они отображаются как некорректные, поскольку теряют их родительские ограничения.

Ответ 3

Создайте новый вид на верхнем уровне xib. Затем перетащите в него существующий вид. Существующие ограничения по-прежнему будут существовать. Вам просто нужно установить новые ограничения для вложения.

Ответ 4

  • Выбрать все виды
  • goo editor → embed in → view
  • Снова выберите все представления
  • Добавить новое ограничение: верхняя часть, нижняя, ведущая, заканчивающаяся до 0

введите описание изображения здесь