在它绑定到的变量中发生数据更改后,用 RxSwift/RxCocoa 制作的 TableView 出现故障
TableView made with RxSwift/RxCocoa glitches after a data change in the Variable it's bound to
当我点击触发数据更改的单元格时,我的变量绑定到的 tableView jumps/glitches。
以下是 tableView 和变量的绑定方式:
variable.asObservable()
.bind(to: tableView.rx.items)
{ (tableView, row, dataForRow) in
}
当按下 tableView 中的一个按钮时,我最终会像这样更新变量的值:
variable.value = updatedData
有人知道为什么会这样吗?
如有任何帮助,我们将不胜感激。
提前致谢。
每次观察到的数组发生变化时,标准 UITableView 绑定程序都会调用 reloadData
。 reloadData 调用不会设置动画,还会将 table 视图重置到顶部。这可能就是您所看到的。您的选择是制作您自己的 UITableViewDataSource 对象,该对象仅重新加载实际更改的单元格,或者使用 RxDataSources cocoapod 库为您执行此操作。
要解决此问题,您必须在调用 prepareForReuse() 时将 DisposeBag 的新实例分配给单元格的 disposeBag 变量:
class CustomCell: UITableViewCell{
var disposeBag = DisposeBag()
override func prepareForReuse() {
super.prepareForReuse()
disposeBag = DisposeBag()
}
}
当我点击触发数据更改的单元格时,我的变量绑定到的 tableView jumps/glitches。
以下是 tableView 和变量的绑定方式:
variable.asObservable()
.bind(to: tableView.rx.items)
{ (tableView, row, dataForRow) in
}
当按下 tableView 中的一个按钮时,我最终会像这样更新变量的值:
variable.value = updatedData
有人知道为什么会这样吗?
如有任何帮助,我们将不胜感激。
提前致谢。
每次观察到的数组发生变化时,标准 UITableView 绑定程序都会调用 reloadData
。 reloadData 调用不会设置动画,还会将 table 视图重置到顶部。这可能就是您所看到的。您的选择是制作您自己的 UITableViewDataSource 对象,该对象仅重新加载实际更改的单元格,或者使用 RxDataSources cocoapod 库为您执行此操作。
要解决此问题,您必须在调用 prepareForReuse() 时将 DisposeBag 的新实例分配给单元格的 disposeBag 变量:
class CustomCell: UITableViewCell{
var disposeBag = DisposeBag()
override func prepareForReuse() {
super.prepareForReuse()
disposeBag = DisposeBag()
}
}