子ViewController调整containerView的大小

问题描述 投票:1回答:1

我的app层次结构看起来像这个enter image description here

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

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

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

我希望这是有道理的。

我读到了一些名为preferredContentSizeDidChange的内容,但我不确定如何正确实施它,或者它是否适用于我的情况。

实施

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

在控制器1中没有效果

ios swift
1个回答
3
投票

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

在我的嵌入式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()
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.