【问题标题】:Sheet doesn't open when triggered in onAppear在 onAppear 中触发时工作表未打开
【发布时间】:2021-01-21 17:09:08
【问题描述】:

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($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。由于某种原因,只是 标准 方式不起作用。

标签: swift swiftui ios14


【解决方案1】:

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

在 SO 和 Apple 论坛中不断提到使用 onAppear() 初始化/活动的东西的错误。这是非常不可靠的。

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

【讨论】:

  • 好的,所以这看起来像一个错误。
猜你喜欢
  • 2015-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-23
  • 1970-01-01
  • 2022-10-01
  • 1970-01-01
  • 2019-10-21
相关资源
最近更新 更多