Ios 用于调整containerView大小的子ViewController

Ios 用于调整containerView大小的子ViewController,ios,swift,Ios,Swift,我的应用程序层次结构如下所示 主视图控制器(我们称之为控制器1)包含一个scrollView、一个image和一个containerView,它指向另一个viewController并将数据传递给tableView 控制器1滚动视图设置为使用约束正确调整大小,以便containerView可以潜在地增加高度 问题是tableView中的数据是动态加载的,并且其大小会发生变化,但这并不反映在containerView上。我需要通知我的containerView关于tableView的新大小,这样它

我的应用程序层次结构如下所示

主视图控制器(我们称之为控制器1)包含一个scrollView、一个image和一个containerView,它指向另一个viewController并将数据传递给tableView

控制器1滚动视图设置为使用约束正确调整大小,以便containerView可以潜在地增加高度

问题是tableView中的数据是动态加载的,并且其大小会发生变化,但这并不反映在containerView上。我需要通知我的containerView关于tableView的新大小,这样它也可以相应地调整大小,用户可以滚动整个屏幕,而不仅仅是在containerView的默认大小内

我希望这是有道理的

我读到了一个叫做的东西,但我不确定如何正确地实施它,或者它是否适用于我的情况

实施

 override func preferredContentSizeDidChangeForChildContentContainer(container: UIContentContainer) {
    super.preferredContentSizeDidChangeForChildContentContainer(container)
    print(container)
}

在控制器1中没有效果

这是一个老问题,但希望它能帮助某人!通过执行以下操作,我能够动态调整容器大小以适应其内容:

在嵌入式UITableViewController中,我添加了:

preferredContentSize.height = tableView.contentSize.height
要更改容器的大小,我添加了嵌入式视图控制器作为父视图控制器的子视图:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let destination = segue.destination as? MyTableViewController {
        addChildViewController(destination)
    }
}
override func preferredContentSizeDidChange(forChildContentContainer container: UIContentContainer) {
    super.preferredContentSizeDidChange(forChildContentContainer: container)
    if let child = container as? MyTableViewController {
        containerHeightConstraint.constant = child.preferredContentSize.height
        container.updateConstraints()
    }
}
最后,我为容器及其高度约束添加了一个出口,并向父视图控制器添加了以下内容:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let destination = segue.destination as? MyTableViewController {
        addChildViewController(destination)
    }
}
override func preferredContentSizeDidChange(forChildContentContainer container: UIContentContainer) {
    super.preferredContentSizeDidChange(forChildContentContainer: container)
    if let child = container as? MyTableViewController {
        containerHeightConstraint.constant = child.preferredContentSize.height
        container.updateConstraints()
    }
}

您还可以在ContainerView(设置高度约束)中实现自己的委托方法,并从childViewController(TableView)调用该方法来更新高度。我不知道您是否可以测试该方法,但如果您没有顶层的滚动视图,还有问题吗?请告诉我我是否正确理解了你的问题。您是否希望容器随着表视图数据的增加而增长(这将阻止它滚动,因为tableview的完整数据不会溢出),然后当它达到屏幕的总高度时,容器视图应停止增长,tableview将溢出并开始滚动?是否“addChildViewController”要触发“PreferredContentSizedChange”是否必须使用?您不需要强制转换childVC,因为container.preferredContentSize.height是您要查找的值。