🐷

iOS14.5でSwiftUIがmultiple sheetに対応したので確認した

2021/05/07に公開

iOS 14.5からSwiftUIで複数のsheetfullScreenCoverをViewに適用可能になりました。

https://developer.apple.com/documentation/ios-ipados-release-notes/ios-ipados-14_5-release-notes

You can now apply multiple sheet(isPresented:onDismiss:content:) and fullScreenCover(item:onDismiss:content:) modifiers in the same view hierarchy.

実際に以下のようなコードを書いて確認してみました。

環境

  • Xcode 12.5
struct ContentView: View {
    @State var showSheet1 = false
    @State var showSheet2 = false
    var body: some View {
        VStack(spacing: 16) {
            Button("sheet1を表示") {
                showSheet1.toggle()
            }
            Button("sheet2を表示") {
                showSheet2.toggle()
            }
        }
        .sheet(isPresented: $showSheet1, onDismiss: nil, content: {
            VStack {
                Text(UIDevice.current.systemVersion)
                Text("sheet1")
            }
        })
        .sheet(isPresented: $showSheet2, onDismiss: nil, content: {
            VStack {
                Text(UIDevice.current.systemVersion)
                Text("sheet2")
            }
        })
    }
}

左が14.4のシミュレータ、右が14.5です。

OSのバージョンで挙動が変わるのはなんとなく微妙ですよね。「14.5以降では正常だが14.4以下で動きがおかしい」といったケースがでてくるかもしれません。まだmultiple sheetは書かない方が良い気がします。

Discussion