【问题标题】:Child ViewController to resize containerView子 ViewController 调整 containerView 的大小
【发布时间】:2016-08-20 11:43:47
【问题描述】:

我的应用层次结构类似于

主视图控制器(我们称之为控制器 1)包含一个滚动视图、一个图像和一个容器视图,该容器视图指向另一个视图控制器并将数据传递给一个 tableView。

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

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

我希望这是有道理的。

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

实施

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

在控制器 1 中无效

【问题讨论】:

  • 您也可以在您的 ContainerView 中实现您自己的委托方法(设置高度约束) - 并从您的 childViewController (TableView) 调用它来更新高度。
  • 不知道能不能测试一下,但是如果顶层没有滚动视图,还会有问题吗?
  • 如果我理解你的问题,请告诉我。您是否希望容器随着tableview数据的增加而增长(这将阻止它滚动,因为tableview的完整数据不会溢出)然后当它达到屏幕的总高度时,容器视图应该停止增长并且tableview会溢出并开始滚动?

标签: ios swift


【解决方案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()
    }
}

【讨论】:

  • 是否必须“addChildViewController”才能触发“preferredContentSizeDidChange”?
  • 您不需要强制转换 childVC,因为 container.preferredContentSize.height 是您要查找的值。
猜你喜欢
  • 2016-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多