自动滚动uitableview在rx swift中的底部



我是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)

最新更新