Да, это возможно.
1 - присвойте своим UIContainerView
верхним, ведущим и конечным ограничениям
2 - присвойте своему UIContainerView
ограничение по высоте с Priority: Low (250)
.. ... это будет "переопределено" новым ограничением, добавленным через код.
3 - Настройте свой дочерний контроллер представления как требуется ... в этом простом случае ограничьте представление стека всеми 4 сторонами
4 - Когда дочернее представление было загружено, установите .translatesAutoresizingMaskIntoConstraints = false
на его .view
, а затем добавьте ограничения на все 4 стороны в представление контейнера
Если вы правильно настроили все ограничения, Высота представления контейнера будет определяться его подпредставлением (представление дочернего элемента V C).
Пример кода:
class AutoSizeContainerViewController: UIViewController {
@IBOutlet var theContainerView: UIView!
// so we can reference the embedded VC
var subVC: SubViewController?
// this executes before viewDidLoad()
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let vc = segue.destination as? SubViewController {
self.subVC = vc
}
}
override func viewDidLoad() {
super.viewDidLoad()
// make sure subVC was set correctly
if let vc = self.subVC {
// constrain child VC's view to container view
vc.view.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
vc.view.topAnchor.constraint(equalTo: theContainerView.topAnchor),
vc.view.leadingAnchor.constraint(equalTo: theContainerView.leadingAnchor),
vc.view.trailingAnchor.constraint(equalTo: theContainerView.trailingAnchor),
// this will keep the container view's bottom equal to the child VC's view content
theContainerView.bottomAnchor.constraint(equalTo: vc.view.bottomAnchor, constant: 0.0),
])
}
}
}
Я разместил полный пример проекта здесь: https://github.com/DonMag/AutosizeContainer