Open1

SwiftUI: Pull to RefreshがwatchOSではできない件

kabeyakabeya

リストやスクロールビューを下にスワイプするとリロードされるというUIがあります。Pull to Refreshと呼ばれるものです。

iOSのSwiftUIであれば、ListScrollView.refreshableモディファイヤを付けるだけで、スワイプしたときに勝手にプログレスインジケータ(回る奴)が表示され、asyncコンテキストで.refreshableに渡したクロージャが呼ばれます。

struct ContentView: View {
    var body: some View {
        List {
            ForEach(1 ... 10, id: \.self) { idx in
                Text("Item \(idx)")
            }
        }
        .padding()
        .refreshable {
            // ここにasyncのリロード処理を書く
        }
    }
}

ただ、iOSではそうなんですが、watchOSだとListを下にスワイプさせても何も起きません。プログレスインジケータは表示されませんし、クロージャも呼ばれません。

Apple標準の「メール」アプリにはPull to Refreshが実装されているので、同じことをしようとすると自前でやるしかない気がします。