2017-02-27 21 views
2

私はRX Swiftを初めて使用しており、表の最後のセルを自動的に表示するようにデータを表示する必要があります(デフォルトでは下にスクロールします)。ここ は、データをバインドするために私のコードです:UITableViewを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) 

ありがとうございました。

関連するノートでは、rx-swiftで作成した優れたオープンソースのサンプルプロジェクトを参考にしてもらえるかどうか、本当に感謝しています。

答えて

2

dataArray emitが新しい値になるたびに、コンテンツのオフセットを設定する必要があります。

良い解決策は、

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:)を行うことができ、観察が値を発したときに副作用を実行するために使用されます。これらの副作用は、サブスクライバごとに1回発生します

+0

do(onNext)を使用して私のために働いたが、次のコードを使用して解決されたエラーを示した:.do(onNext:{[unowned self] query in tableView.setContentOffset(CGPoint(x:0、y :CGFloat.greatestFiniteMagnitude)、アニメーション:true) }) –

関連する問題