🐛

iOS16以下のSwiftUI SheetでのScenePhaseのonChangeの不具合とそのWorkaround

2025/01/13に公開

SwiftUIのライフサイクルでアプリのフォアグラウンドやバックグラウンドを検知する際、通常はScenePhaseを使う。 しかし、iOS16以下でSheet内で ScenePhase を用いるとき、onChange が正しく発火しない問題がある。そのworkaroundを紹介する。

bugの再現動画

workaround

Sheetを呼び出す側で、.environment(.scenePhase, scenePhase) を使う。

.sheet(isPresented: $isPresented) {
    SheetView()
        .environment(\.scenePhase, scenePhase)
}

Discussion