我有一个iOS应用,我正在重写以使用RxSwift
和RxCocoa
。它工作得很好,但是我遇到了集合视图数据绑定的问题。
在我的应用程序中,我在视图控制器上调用viewWillAppear
时执行数据绑定,例如:
let view = collectionView
getStuff().bind(to: view.rx.items(cellIdentifier: "Cell", cellType: Cell.self)) {
row, item, cell in
cell.setup(with: item)
}.disposed(by: disposeBag)
```
这很有效 - 我的数据已正确绑定到我的集合视图。
但是,为了避免对当前不可见的视图控制器进行活动绑定,每当调用disposeBag
时,我都会释放viewWillDisappear
。然后,每当再次显示vc时,我重新创建dispose包并重新绑定数据。
我的问题是,当我将数据重新绑定到集合视图时,会重置内容偏移量。考虑我在列出项目时列出内容并导航到新视图控制器的场景。每当我返回列表时,新的数据绑定将导致滚动视图滚动到顶部。
集合视图的默认行为是即使数据源发生更改并调用reloadData
也要保持其偏移量。我在这里遗漏了什么,或者我做错了什么?
答案 0 :(得分:0)
在清除disposeBag之后,听起来像您绑定收藏视图的数据已完全释放。然后,当再次调用master %>%
left_join(new.data, by = "id")
时,您的Observable可能暂时没有数据,因此将偏移重置为0.0。
如果您不熟悉这些术语,请查看冷热Observables。如果您通过远程API调用获取内容,即使在视图控制器导航后,也可以明智地维护对已获取数据的引用。这样,您可以确保在返回原始VC时不会再次获取数据。