2017-11-01 10 views
1

私はチャットアプリで作業していますが、最初にデータベースから100メッセージしか取得しません。ユーザーがスクロールすると、データベースからメッセージを取り出し、スクロール位置を維持するために、テーブルをリロードした後、手動でコンテンツオフセットを設定します。スクロール位置は正常ですが、テーブルビューのスクロールは停止します。私は、メッセージが取り出され、テーブルがリロードされたとユーザが感じることを望まない。停止したスクロールを再開する方法。ユーザーが手動でテーブルをスクロールすると、UITableViewのpanGestureRecognizerプロパティを使用して方向と速度を取得します。UITableViewでuserScrollingをシミュレートする

答えて

0

私が正しく理解している場合は、テーブルビューにページングメカニズムを実装したいと考えています。ユーザーがスクロール・ビューの先頭に到達すると、次のページが取得され、それが大変な経験になります。 私は、ユーザがスクロールしている間に一定の閾値に対してtableView.contentOffset.yをテストすることを提案しています。 contentOffset.yがこのしきい値を超えると、次のページを取得します。

UIScrollViewDelegateメソッドscrollViewDidScroll(_:)を実装して、contentOffsetを取得してしきい値と比較することができます。 このようにして、データは、ユーザがtableViewの最後に達する前に(ある程度)フェッチされます。

private let fetchThreshold: CGFloat = 80 
func scrollViewDidScroll(_ scrollView: UIScrollView) { 
    if scrollView.contentOffset.y > scrollView.contentSize.height - scrollView.frame.height - fetchThreshold { 
     /* Fetch next page. 
     Remember to lock the process so the data won't be fetched multiple times. Use a boolean... 
     */ 
    } 
} 
+0

はい私はそれがうまく動作するページングを実装しました。問題はスクロールが停止し、ユーザーが再びスクロールしなければならないことだけです。 –

+0

私のチャットアプリケーションでは、このトリックがドリルを行いました(ユーザーがscrollViewの最後に到達したときに次のページデータが既に利用可能であるという条件で)。 – DanielH

+0

私は同じ方法で実装しました。ユーザーがスクロールを終了する前にデータをプリフェッチします。問題は-setContentOffsetだけです。スクロール位置を復元するためにコンテンツオフセットを設定した後、スクロールは停止します。 –

関連する問題