ios - RxCocoa 数据绑定(bind)导致 Collection View 滚动到顶部

标签 ios swift rx-swift rx-cocoa

我有一个 iOS 应用程序,正在重写以使用 RxSwiftRxCocoa。它工作得很好,但我在 Collection View 数据绑定(bind)方面遇到问题。

在我的应用程序中,当在 View Controller 上调用 viewWillAppear 时,我会执行数据绑定(bind),例如:

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)

```

这非常有效 - 我的数据已正确绑定(bind)到我的 Collection View 。

但是,为了避免当前不可见的 View Controller 具有事件绑定(bind),每当调用 viewWillDisappear 时,我都会释放 disposeBag 。然后,每当 vc 再次显示时,我都会重新创建 dispose bag 并重新绑定(bind)数据。

我的问题是,当我将数据重新绑定(bind)到 Collection View 时,内容偏移量被重置。考虑这样一个场景:当点击某个项目时,我会列出内容并导航到新的 View Controller 。每当我返回列表时,新的数据绑定(bind)都会导致 ScrollView 滚动到顶部。

Collection View 的默认行为是保持其偏移量,即使数据源发生更改并且调用了 reloadData 也是如此。我在这里错过了什么还是我做错了什么?

最佳答案

听起来您将 CollectionView 绑定(bind)到的数据在清除 disposeBag 后已完全释放。然后,当再次调用 viewWillAppear 时,您的 Observable 可能会暂时没有数据,从而将偏移量重置为 0.0。

如果您不熟悉这些术语,请查看热 Observables 和冷 Observables。如果您通过远程 API 调用获取内容,那么即使在 View Controller 离开后,仍保留对所获取数据的引用可能是明智之举。这样您就可以确保返回原始 VC 时不会再次获取数据。

关于ios - RxCocoa 数据绑定(bind)导致 Collection View 滚动到顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46879651/

相关文章:

ios - 快速删除 map 覆盖

swift - 为什么在尝试对通用 ArraySlice 调用 indexOf 时会出现错误?

ios - 创建不可重用的单元格 UICollectionView

ios - 如何在 RxSwift 中观察 UITableView 点击/选择的先前和当前值?

ios - 如何使用 RxTest 测试 combineLatest observable?

ios - textView :shouldInteractWithURL:inRange:interaction: 的 RxSwift 包装器

ios - 从 AppDelegate 调用函数时如何刷新 UIViewController 内容?

iphone - 使用 NSPredicate 从关系中检索核心数据中的信息

ios - 如何在 swift 3 中删除 Tabbar 项目

swift - 如何使用 Swift 在后台线程中保存到 CoreData?