我希望能够关闭一张纸并在之后立即呈现全屏覆盖,但是这似乎在两个状态修改之间没有延迟的情况下不起作用。
struct ContentView: View {
@State var sheet = false
@State var cover = false
var body: some View {
Button("Click me for sheet") {
sheet = true
}
.fullScreenCover(isPresented: $cover) {
Text("This is a full screen cover")
}
.sheet(isPresented: $sheet) {
Text("This is a sheet")
Button("This doesn't work") {
sheet = false
cover = true
}
Button("This works") {
sheet = false
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
cover = true
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
单击“这不起作用”按钮会生成下图,演示全屏封面显示为一张纸且未覆盖整个屏幕:
在两次状态修改之间引入一个小延迟(通过单击“This Works”按钮来完成)可以解决此问题。
我对 SwiftUI 有什么不明白的地方可以解释这种行为?
测试于:
像这样将修饰符添加到单独的视图中也不起作用:
Text("Another view").sheet(isPresented: $sheet) { ...
你可以试试这个:
struct ContentView: View {
@State var sheet = false
@State var cover = false
var body: some View {
Button("Click me for sheet") {
sheet = true
}
.fullScreenCover(isPresented: $cover) {
Text("This is a full screen cover")
}
.sheet(isPresented: $sheet, onDismiss: {cover = true}) {
Text("This is a sheet")
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2494 次 |
最近记录: |