Вы не можете сделать это с Storyboard only ... вам нужно добавить небольшой код.
Сначала в Storyboard / Interface Builder:
- ограничить нижний контейнер для просмотра (безопасная область). Leading / Trailing / Bottom
- присвоить ему ограничение высоты - значение на самом деле не имеет значения, просто что-то, что позволяет вам увидеть приблизительный макет
- дает ограничение высоты
Priority: Low (250)
. Это позволит ему увеличиваться / уменьшаться в зависимости от размера автоматического макета встроенного представления. - ограничивает верхний контейнер для просмотра (безопасная область). Верхний / ведущий / конечный
- ограничивает Контейнер снизу вверху Контейнер сверху внизу
IB автоматически предоставляет вам контроллеры представления «по умолчанию», когда вы добавляете представления контейнера, устанавливая размер контейнера. Используйте Атрибуты и Размер Панели инспектора, чтобы изменить «Симулированные метрики» и Размер на Freeform
. Это позволяет вам работать с «вспомогательными контроллерами представления» в нужных размерах.
Вот пример того, как это может выглядеть:
![enter image description here](https://i.stack.imgur.com/9OlzB.png)
При встраивании контроллера вида в UIContainerView
автоматически создается «embed segue», и вы можете получить ссылку на «подчиненные» контроллеры представления (и их представления) в prepare(for segue: ...)
. Используйте это, чтобы получить ссылки на представления, чтобы вы могли изменить их ограничения.
Так что ваше viewDidLoad()
fun c будет содержать что-то вроде этого:
// a View Controller's "root" view loads with
// .translatesAutoresizingMaskIntoConstraints = true
// but we want to let auto-layout change it
topVCView.translatesAutoresizingMaskIntoConstraints = false
botVCView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
// constrain all 4 sides of top view to top container
// because the Top container view has a Priority: 1000 height constraint,
// this will "fit" the top VC's view into the auto-layout sized top container
topVCView.topAnchor.constraint(equalTo: topContainerView.topAnchor),
topVCView.bottomAnchor.constraint(equalTo: topContainerView.bottomAnchor),
topVCView.leadingAnchor.constraint(equalTo: topContainerView.leadingAnchor),
topVCView.trailingAnchor.constraint(equalTo: topContainerView.trailingAnchor),
// constrain all 4 sides of bottom view to bottom container
// because the Bottom container view has a Priority: 250 height constraint,
// the auto-layout height of the Bottom VC's view will determine the height of the bottom container
botVCView.topAnchor.constraint(equalTo: bottomContainerView.topAnchor),
botVCView.bottomAnchor.constraint(equalTo: bottomContainerView.bottomAnchor),
botVCView.leadingAnchor.constraint(equalTo: bottomContainerView.leadingAnchor),
botVCView.trailingAnchor.constraint(equalTo: bottomContainerView.trailingAnchor),
])
и вот пример того, как это могло бы выглядеть во время выполнения:
![enter image description here](https://i.stack.imgur.com/MbyaM.png)
Был еще один пример "автоматического определения размера контейнера" на GitHub, поэтому я добавил ваш макет во второй пример. Вы можете получить его здесь, чтобы вы могли изучить макет, ограничения и код (и запустить его, чтобы увидеть результаты): https://github.com/DonMag/AutosizeContainer