Sheet 在 onAppear 中触发时不打开
Sheet doesn't open when triggered in onAppear
我遇到了一个奇怪的错误,当 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([=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")
}
}
}
我遇到了一个奇怪的错误,当 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([=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")
}
}
}