今日のコード
func scrollViewDidScroll(_ scrollView: UIScrollView) { if scrollView.contentOffset.y > 0 { let height = scrollView.frame.size.height let contentYoffset = scrollView.contentOffset.y let distanceFromBottom = scrollView.contentSize.height - contentYoffset if distanceFromBottom < height { // 何回も呼ばれてしまうので、リロード中は変数:reloadingをtrueにしておく if !reloading && existsNextPage { page += 1 // リロード処理のフラグ変更を「true」 reloading.toggle() # ・・・省略 (Qiitaからデータ取得する処理) ・・・ // リロード処理のフラグ変更を「false」 reloading.toggle() tableView.reloadData() } } } }
SwiftUIでも、ScrollViewのcontents.heightとoffset値を取得できるから同じように実装できそう。 fukatsu.tech
reload中に無駄なfetchが起きないようにすることと、効率的な更新方法をサーバー側と連携をとることは大切かもしれない。pull refreshは面倒なので、できるだけ自動で更新してあげたい。そしてできればスクロール位置も保持してあげたい、、それを踏まえて考える必要があるかなと、、 tech.dely.jp
調べている途中に出会った記事で、ページネーションと無限スクロールの使い分けを説明していて面白かった〜! Googleの検索結果がページネーションで、画像検索が無限スクロールなのはちゃんと目的を理解して使い分けているのだと納得。 uxmilk.jp