如何让父VC观察其子子视图(集合视图)之一正在滚动?

  • 本文关键字:视图 滚动 集合 VC 观察 ios swift
  • 更新时间 :
  • 英文 :


我正在尝试模拟Apple的天气应用程序动画,当您滚动时,顶部标题会折叠并保留为压缩的粘性单元格。我正在尝试以编程方式完成所有 UI 并且没有故事板。

我想到的两种实现方式都有一个我无法解决的问题。

我最初的尝试是让containerVC包含一个UIView(作为标头)和一个UICollectionViewController。问题是 containerVC 无法访问 UICollectionViews scrollViewDidScroll(),我将使用它来计算和调整 UIView 的大小。我可以将 containerVC 设为集合视图委托,但我想避免这种情况以保持我的逻辑分离。我也尝试使用键值观察器,但我不知道如何让它工作。

我的第二次尝试是使用 UICollectionReusableView 作为标题单元格,这样就没有容器视图,只有一个集合视图控制器。这里的问题是我无法弄清楚如何动态调整标题单元格的大小。标题大小当前是从引用大小返回的标题InSection,我一直无法找到另一种更新它的方法。

有没有更好的方法呢?或者对于我尚未尝试过的所描述的问题,更简单的解决方案?

您可以实现自己的委托:

protocol ParentDelegate: class {
func childDidScroll()
}
extension ParentViewController: ParentDelegate {
func childDidScroll() {
print("My child controller did scroll")
}
}

在要调用它的类中创建delegate变量:

weak var delegate: ParentDelegate?

将其设置为父视图控制器:

delegate = parentVC

然后在你的孩子的滚动方法中,你称之为:

delegate?.childDidScroll()

最新更新