【发布时间】:2021-01-21 17:09:08
【问题描述】:
当sheet 在onAppear 中触发时无法打开,我遇到了一个奇怪的错误。
以下不会在 Xcode 12.3、iOS 14.3 中触发sheet:
struct ContentView: View {
@State private var sheetActive = false
var body: some View {
Text("Test")
.sheet(isPresented: $sheetActive) {
Text("Sheet")
}
.onAppear {
sheetActive = true
}
}
}
sheet 只有在我以任何方式与屏幕交互后才会弹出。
但是,如果我将 Text 包装在 NavigationView / List 等中,它确实有效。
此外,即使附加一个简单的修饰符(如onChange)也会触发sheet:
struct ContentView: View {
@State private var sheetActive = false
var body: some View {
Text("Test")
.sheet(isPresented: $sheetActive) {
Text("Sheet")
}
.onAppear {
sheetActive = true
}
.onChange(of: sheetActive) {
print($0)
}
}
}
当我异步触发sheet 时它也有效:
struct ContentView: View {
@State private var sheetActive = false
var body: some View {
Text("Test")
.sheet(isPresented: $sheetActive) {
Text("Sheet")
}
.onAppear {
DispatchQueue.main.async {
sheetActive = true
}
}
}
}
这是 iOS 14.3 中的错误还是我不知道的一些预期更改?
【问题讨论】:
-
已尝试更改工作表顺序和出现方法并添加延迟
-
更改顺序也不起作用。而且我什至不需要延迟,它也适用于简单的
DispatchQueue.main.async。由于某种原因,只是 标准 方式不起作用。