在 onAppear 中触发时工作表未打开
Posted
技术标签:
【中文标题】在 onAppear 中触发时工作表未打开【英文标题】:Sheet doesn't open when triggered in onAppear 【发布时间】: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
。由于某种原因,只是 标准 方式不起作用。
【参考方案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")
【讨论】:
好的,所以这看起来像一个错误。以上是关于在 onAppear 中触发时工作表未打开的主要内容,如果未能解决你的问题,请参考以下文章
Google App Engine、Jinja2 CSS 样式表未加载 (404)