Встраивание UIViewController с intrinsicContentsize - PullRequest
0 голосов
/ 19 января 2019

Я пытаюсь реализовать представление, имеющее сверху представление с динамической высотой и ниже UICollectionView в раскадровке.

Пока я размечаю, что непосредственно в одном ViewController все работает нормально.

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

SizingSample[53440:11697282] [LayoutConstraints] Unable to simultaneously satisfy constraints. (
    "<NSLayoutConstraint:0x6000030cc690 UILayoutGuide:0x600002af9180'UIViewSafeAreaLayoutGuide'.bottom == SizingSample.DynamicSizeView:0x7fda024197b0.bottom + 3   (active)>",
    "<NSLayoutConstraint:0x6000030cc960 SizingSample.DynamicSizeView:0x7fda024197b0.top == UILayoutGuide:0x600002af9180'UIViewSafeAreaLayoutGuide'.top + 20   (active)>",
    "<NSLayoutConstraint:0x6000030c52c0 'UIView-Encapsulated-Layout-Height' UIView:0x7fda024195d0.height == 0   (active)>",
    "<NSLayoutConstraint:0x6000030cc870 'UIViewSafeAreaLayoutGuide-bottom' V:[UILayoutGuide:0x600002af9180'UIViewSafeAreaLayoutGuide']-(0)-|   (active, names: '|':UIView:0x7fda024195d0 )>",
    "<NSLayoutConstraint:0x6000030cc7d0 'UIViewSafeAreaLayoutGuide-top' V:|-(0)-[UILayoutGuide:0x600002af9180'UIViewSafeAreaLayoutGuide']   (active, names: '|':UIView:0x7fda024195d0 )>"
)

IMO ограничение 'UIView-Encapsulated-Layout-Height' нарушает все, но у меня нетне нашел способа предотвратить это.

Образец с чередованием можно найти по адресу https://github.com/tengelmeier/viewcontroller-embedding-problem.git

Как я могу автоматически размещать представление, учитывающее динамический размер встроенного представления (.. контроллера)?

1 Ответ

0 голосов
/ 20 января 2019

Поскольку ios автоматически применяет набор фиксированных фреймов при встраивании ContainerController.Вы должны указать не переводить маску автоматического изменения размера в LayoutConstraint.

Вы можете сделать это, установив следующее свойство в ContainerViewController (целевой контроллер) метод ViewdidLoad.

view.translatesAutoresizingMaskIntoConstraints = false
...