Встраивать представления в супер-просмотр без потери ограничений автоопределения
в приложении 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
![введите описание изображения здесь]()