AutoFit containerView size to a tableView

Viewed 36

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

0 Answers
Related