Как изменить размер корневого представления ViewController автоматически, чтобы соответствовать его содержанию? - PullRequest
0 голосов
/ 05 апреля 2019

При создании нового UIViewController корневое представление в соответствующем файле XIB может быть установлено на любую фиксированную высоту.Однако корневое представление должно автоматически соответствовать его содержимому.Как это можно сделать?

  • Создайте новый файл XIB:
  • Добавьте новое подпредставление к корневому представлению и задайте ему фиксированные ширину и высоту.
  • Добавьте ведущее ограничение к подпредставлению, чтобы определить позицию X
  • Добавьте верхнее ограничение к подпредставлению, чтобы определить позицию Y
  • Добавьте нижнее ограничение к подпредставлению, чтобы определить высоту содержимого (top + subview height + bottom)
  • До сих пор все было хорошо, потому что top + subview height + bottom равна высоте корневого представления.
  • Если для верхнего или нижнего ограничения установлено другое значение, я бы ожидал, что корневое представлениеизменяется в соответствии с его содержанием.Однако IB вместо этого жалуется на противоречивые ограничения.

Как это можно решить?

Конечно, в большинстве случаев размер корневого представления определяется не его содержимым, а экраном, модальнымViewController и т. д.

Однако я хотел бы показать ViewController как содержимое ScrollView в другом ViewController. В этом случае ContentViewController должносопоставьте его содержимое, и ScrollView обеспечит доступность всего содержимого.

Можно ли это решить в IB без манипулирования ограничениями в коде?

1 Ответ

0 голосов
/ 05 апреля 2019

После еще нескольких проб и ошибок найдено рабочее решение: Просто не используйте представление root : -)

Я добавил другое представление на корневом уровне в файл XIB и переместил в него корневое представление, сделав его корневым представлением нового представления. Пока розетка VCs view все еще указывает на корневое представление (которое больше не находится на уровне корня), это прекрасно работает.

Доступ к корневому представлению по-прежнему возможен с помощью theViewController.view. Поскольку он не размещен на корневом уровне, нет проблем с его размером.

Хотя это работает нормально, это довольно забавно. Есть ли какое-нибудь более чистое решение, которое не требует просмотра пустышки?

...