サンプルプロジェクトで再現できないんだけど、DatePickerで日付を選択中にモーダールビューを表示しようとすると表示できなくなる現象があって、選択を一度解除してからモーダールビュー表示しないと上手くいかない。
(NavigationViewやSheetなど何重かにViewが重なってるからだと思うが上手く再現できない。)
このカレンダー選択が表示されているかどうかが知りたいのだが情報を得られず。
せめて閉じる方法がないかと検索したらこちらがヒット。
DatePickerのIDを変えると初期状態に戻してくれるらしく、結果として閉じることができる。
モーダルビューは次のRun-Loopで処理しないとうまく表示されないようで、DispatchQueue.main.asyncで遅延させている。
struct PresentedView: View { @State var date = Date() @State var isPresented = false @State var calendarId: UUID = UUID() var body: some View { VStack { Spacer() DatePicker("Selecte a date", selection: $date) .id(calendarId) Spacer() Button("Open") { calendarId = UUID() DispatchQueue.main.async { isPresented.toggle() } } } .padding(20) .sheet(isPresented: $isPresented, content: { Color.green }) } }
しかしよくこういう所に辿り着くもんだと感心する。