ページネーション:)

今日のコード

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