主视图控制器(让我们称之为控制器1)包含一个scrollView,一个图像和一个指向另一个viewController并将数据传递给tableView的containerView。
控制器1滚动视图设置为使用约束正确调整大小,以便containerView可能在高度上增长。
问题是tableView具有动态加载的数据并且其大小发生了变化,但这并未反映在containerView上。我需要通知我的containerView有关tableView新大小的通知,因此它也可以相应地调整大小,用户可以滚动整个屏幕,而不仅仅是在containerView的默认大小。
我希望这是有道理的。
我读到了一些名为preferredContentSizeDidChange的内容,但我不确定如何正确实施它,或者它是否适用于我的情况。
实施
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()
}
}