2017-10-22 11 views
0

RxSwiftRxCocoaを使用するように書き換え中のiOSアプリケーションがあります。実際にはうまくいきますが、コレクションビューのデータバインディングに問題があります。 viewWillAppearは、ビューコントローラ上で呼び出されたときに私のアプリでRxCocoaデータバインディングにより、コレクションビューがスクロールします。

、私は、例えば、データバインディングを実行します。

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) 

`` `

これは素晴らしい作品 - 私のデータが正しく私のコレクションにバインドされています再生回数

しかし、現在表示されていないビューコントローラのアクティブなバインディングを避けるために、私はviewWillDisappearが呼び出されるたびにdisposeBagをデアロします。その後、vcが再び表示されるたびに、処分バッグを再作成してデータを再バインドします。

私の問題は、コレクションビューにデータを再バインドすると、コンテンツのオフセットがリセットされることです。アイテムをタップしたときにコンテンツをリストし、新しいView Controllerに移動するシナリオを考えてみましょう。リストに戻るたびに、新しいデータバインドによってスクロールビューが上にスクロールします。

コレクションビューのデフォルトの動作では、データソースが変更されてもreloadDataが呼び出されてもオフセットを保持します。私はここで何かを逃しているのですか、何か間違っていますか?

答えて

0

あなたのコレクションビューをバインドしているデータは、disposeBagをクリアした後に完全に解放されたようです。その後、viewWillAppearが再度呼び出されると、Observableがデータなしで一時的に消失し、オフセットが0.0にリセットされることがあります。

これらの用語に精通していない場合は、熱くて寒いオブザーバブルを見てください。リモートAPI呼び出しを使用してコンテンツを取得している場合は、ビューコントローラーがナビゲートした後でも、取得したデータへの参照を維持することをお勧めします。これにより、元のVCに戻ったときにデータが再度フェッチされないことが保証されます。

関連する問題