我正在尝试模拟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()