RxCocoa数据绑定导致集合视图滚动到顶部

时间:2017-10-22 22:10:47

标签: ios swift rx-swift rx-cocoa

我有一个iOS应用,我正在重写以使用RxSwiftRxCocoa。它工作得很好,但是我遇到了集合视图数据绑定的问题。

在我的应用程序中,我在视图控制器上调用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也要保持其偏移量。我在这里遗漏了什么,或者我做错了什么?

1 个答案:

答案 0 :(得分:0)

在清除disposeBag之后,听起来像您绑定收藏视图的数据已完全释放。然后,当再次调用master %>% left_join(new.data, by = "id") 时,您的Observable可能暂时没有数据,因此将偏移重置为0.0。

如果您不熟悉这些术语,请查看冷热Observables。如果您通过远程API调用获取内容,即使在视图控制器导航后,也可以明智地维护对已获取数据的引用。这样,您可以确保在返回原始VC时不会再次获取数据。