【发布时间】:2022-01-21 15:03:09
【问题描述】:
场景:
- RootScreen 通过
.sheet以模态方式呈现 DateScreen - DateScreen 有一个带有 CompactDatePickerStyle() 的 DatePicker 和一个关闭模式的按钮
- 用户打开 DatePicker
- 用户点击 DatePicker 以调出 NumPad 以进行手动键盘输入
- 用户按下按钮关闭模式
SwiftUI 会认为 .sheet 被解除了,但实际上,只有 DatePicker 的模态被解除了。
最小代码示例:
struct DateScreen: View {
@Binding var isPresented: Bool
@State var date: Date = Date()
var body: some View {
NavigationView {
VStack {
DatePicker("", selection: $date, displayedComponents: [.hourAndMinute])
.datePickerStyle(CompactDatePickerStyle())
}
.navigationBarItems(leading: Button("Dismiss") {
isPresented = false
})
}
}
}
@main
struct Main: App {
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
@State var isPresenting: Bool = false
var body: some Scene {
WindowGroup {
Button("Present modal", action: {
isPresenting = true
})
.sheet(isPresented: $isPresenting, content: {
DateScreen(isPresented: $isPresenting)
})
}
}
}
显示损坏行为的 Gif:
注意,如果用户不打开 NumPad,它似乎可以正常工作。
【问题讨论】:
-
可能与整个根视图控制器有关(一切都在那里)。如果您使用来自here 的
.adaptiveSheet,则它可以正常工作。可能不是解决方案。