我是RX Swift的新手,需要在表视图中显示数据,以便它自动显示表的最后一个单元格(默认情况下滚动到底部)。这是我的代码绑定数据:
private var dataArray = Variable<[Message]>([])
private let bag = DisposeBag()
dataArray.asObservable()
.bindTo(tableView.rx.items) { (tableView, row, msg) in
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")!
cell.textLabel?.text = obj.title
return cell
}
.addDisposableTo(bag)
此代码将数据显示为表视图,但每次添加新单元格时都不会滚动表视图。我可能需要添加以下行,但不确定要使用哪个Rx-Swift操作员?
tableView.setContentOffset(CGPoint(x: 0, y : CGFloat.greatestFiniteMagnitude), animated: true)
预先感谢。
在相关的注释中,如果有人可以提出一个很好的开源样本项目,我们可以参考。
您将需要每次 dataArray
发出新值设置内容偏移。
一个好的解决方案将是
dataArray.asObservable().map { CGPoint(x: 0, y: CGFloat.greatestFiniteMagnitude) }
.bindTo(tableView.rx.contentOffset)
.addDisposableTo(bag)
否则,您可以简单地做
dataArray.asObservable()
.do(onNext: {
self.tableView.setContentOffset(CGPoint(x: 0, y : CGFloat.greatestFiniteMagnitude), animated: true)
})
.bindTo(tableView.rx.items) { (tableView, row, msg) in
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")!
cell.textLabel?.text = obj.title
return cell
}
.addDisposableTo(bag)
do(onNext:)
用于执行副作用时,当可观察到一个值时。这些副作用将发生每个订户。
update @tomahh's,
2022_01,带有NSObject_Rx
dataArray.asObservable().map{ _ in CGPoint(x: 0, y: CGFloat.greatestFiniteMagnitude) }
.bind(to: tableView.rx.contentOffset)
.disposed(by: rx.disposeBag)