0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【SwiftUI】iOS18でsheet→alertが連続で表示されるようになった?

Posted at

どういうこと?:thinking:

    @State var isPresented: Bool = false
    @State var isAlertOPresented = false
    
    var body: some View {
        NavigationView {
            // テキトーなViewが書かれている
        }
        .interactiveDismissDisabled()
        .onAppear() {
            isPresented = true
            DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
                isPresented = false
                isAlertOPresented = true
            }
        }
        .sheet(isPresented: $isPresented) {
            VStack {
                ProgressView()
            }
            .interactiveDismissDisabled()
            .dynamicTypeSize(.medium ... .medium)
        }
        .alert("アラート表示", isPresented: $isAlertOPresented) {
            Button("ok") {
            }
        } message: {
        }
    }

このような、1秒間ぐるぐるが表示したあと、アラートを表示したいというコードがあったとして、
iOS17では、以下のように遅延を入れないと、sheet→alertが表示されない。

            isPresented = true
            DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
                isPresented = false
                DispatchQueue.main.async { // 遅延が必要
                    isAlertOPresented = true
                }
            }

遅延なしのコードだと、↓エラーが表示される。

Attempt to present <SwiftUI.PlatformAlertController: 0x105818600> on <_TtGC7SwiftUI19UIHostingControllerGVS_15ModifiedContentVS_7AnyViewVS_12RootModifier__: 0x10381b000> (from <_TtGC7SwiftUI19UIHostingControllerGVS_15ModifiedContentVS_7AnyViewVS_12RootModifier__: 0x10381b000>) which is already presenting <_TtGC7SwiftUI29PresentationHostingControllerVS_7AnyView_: 0x104837400>.

iOS18では、遅延を入れなくてもsheet→alertの順で表示されるようになった。
また、"Attempt to present〜〜〜"のエラーも表示されなくなった。

iOS18からsheetやalertの動きが変わったのかと思ったが、このことについて検索してみたがHitせず。
よくわからんが動くのでヨシ!
とりあえずメモしておく。

なにか知っている方がいたら、コメントください。

検証環境

  • Xcode16
  • iOS18.0
  • iOS17.1.1
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?