Sheet 在 onAppear 中触发时不打开

Sheet doesn't open when triggered in onAppear

我遇到了一个奇怪的错误,当 sheetonAppear 中触发时无法打开。

以下 不会 触发 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([=12=])
            }
    }
}

当我异步触发 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 中的错误还是我不知道的某些预期更改?

如果您将 sheetActive 更改为 true,它应该会在初始化时打开。

SO 和 Apple 论坛中不断提到使用 onAppear() 到 initialize/active 的错误。很不靠谱。

struct ActiveSheetView: View {
    @State private var sheetActive = true
    var body: some View {
        Text("Test")
            .sheet(isPresented: $sheetActive) {
                Text("Sheet")
            }
    }
}