I have a ViewControllerA with scroll containing a UIView called containerView. This containerView is being filled with a tableView. The viewControllerA must have an adaptive height to the size of the tableView and I don't follow it. I have tried several solutions proposed here, but none of them works for me. I have set in viewControllerA:
public static var containerView: UIView {
let view = UIView()
view.setContentHuggingPriority(.init(rawValue: 0), for: .horizontal)
view.setContentHuggingPriority(.init(rawValue: 0), for: .vertical)
return view
}
var heightContainer = CGFloat(870)
var heightConstraintContainer = NSLayoutConstraint()
init(vcA: ViewControllerA, vcB: ViewControllerB, vcC: ViewControllerC) {
self.viewControllerA = vcA
self.viewControllerB = vcB
self.viewControllerC = vcC
self.currentVC = viewControllerA
super.init(nibName: nil, bundle: nil)
add(asChildViewController: currentVC)
}
func setupView() {
containerView.translatesAutoresizingMaskIntoConstraints = false
scrollView.translatesAutoresizingMaskIntoConstraints = false
}
private func add(asChildViewController viewController: UIViewController) {
addChild(viewController)
containerView.addSubview(viewController.view)
viewController.view.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
viewController.view.topAnchor.constraint(equalTo: containerView.topAnchor),
viewController.view.leadingAnchor.constraint(equalTo: containerView.leadingAnchor),
viewController.view.trailingAnchor.constraint(equalTo: containerView.trailingAnchor),
viewController.view.bottomAnchor.constraint(equalTo: containerView.safeAreaLayoutGuide.bottomAnchor)
])
viewController.didMove(toParent: self)
}
private func setupConstraints() {
containerView.setContentHuggingPriority(.defaultHigh, for: .vertical)
// heightContainer = currentVC.view.frame.height
// heightConstraintContainer = containerView.heightAnchor.constraint(greaterThanOrEqualToConstant: heightContainer)
NSLayoutConstraint.activate([
containerView.topAnchor.constraint(equalTo: segmentedControl.bottomAnchor, constant: 30),
containerView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor),
containerView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor),
containerView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor),
containerView.widthAnchor.constraint(equalTo: scrollView.widthAnchor),
// containerView.heightAnchor.constraint(equalTo: scrollView.heightAnchor),
// heightConstraintContainer,
scrollView.topAnchor.constraint(equalTo: view.topAnchor),
scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
scrollView.widthAnchor.constraint(equalTo: view.widthAnchor),
scrollView.heightAnchor.constraint(equalTo: view.heightAnchor)
])
}
I have set in viewControllerB:
tableView.translatesAutoresizingMaskIntoConstraints = false
private func setupConstraints() {
NSLayoutConstraint.activate([
tableView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 32),
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor)
])
}
What am I doing wrong? What am I forgetting or what should I do so that the viewcontrollerB containing the table 'notifies' the viewControllerA that its size is 'X' and the view is updated?
Thank you very much for your help. Regards