kota1021
@kota1021 (松本 幸太郎)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

swiftUI ios16 .sheet(モーダルビュー)に遅延させてViewを渡す方法

Q&A

Closed

swiftUI .sheet(モーダルビュー)に遅延させてViewを渡す方法

現在swiftの勉強で辞書アプリを作っています。メインはSwiftUIで、内蔵辞書(UIReferenceLibraryViewController)はUIKitなので
UIViewControllerRepresentableを通して描写しています。
現在私が実装したい機能は内蔵辞書をSwiftUIの.sheetで表示することで、ほぼほぼできているのですが、ios16から使えるセミモーダルのモディファイアである
.presentationDetents([.medium])を与えると、動画のように一旦全画面に広がってからmediumサイズに戻ります。
一度.sheetになんのviewも渡さないで実行すると最初からmediumサイズで止まったので、おそらくUIReferenceLibraryViewControllerが渡してくるViewが影響していると考えました。

ezgif-3-61783d5697.gif
ezgif-3-cfca368a60.gif

そこで以下のようにDispachQueueを使ってみたのですが、エラーが出ました。
(Type '()' cannot conform to 'View')

Viewを一定時間後に渡す方法はありますでしょうか?
この問題で丸一日は使っているので、アドバイスをいただけると大変ありがたいです。

 .sheet(isPresented: $showDict){
                DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
                    if #available(iOS 16.0, *) {
                              DictView(text: char)
                                .presentationDetents([.medium, .large])
                    } else {
                        // Fallback on earlier versions
                        DictView(text: char)
                    }
}
}
0

1Answer

これ、自分の力では遅延処理ができなかったので、
呼び出し元でUIReferenceLibraryViewControllerを作って、
UIViewRepresentableにわたすようにすると解決しました。

0Like

Your answer might help someone💌