在 iOS 14 及更早版本中,我们导入 presentationMode
环境变量:
@Environment(\.presentationMode) var presentationMode
然后调用self.presentationMode.wrappedValue.dismiss()
来关闭视图。
在iOS 15上,此方法已被弃用,并引入了一个新的环境变量dismiss
:
@Environment(\.dismiss) var dismiss
我们可以直接使用dismiss()
调用相应的函数以达到同样的效果。
我知道我们可以执行以下操作来调用适当的 dismiss 函数并支持所有版本:
if #available(iOS 15, *) {
self.dismiss()
} else {
self.presentationMode.wrappedValue.dismiss()
}
但是我该如何导入/定义正确的环境变量呢?尝试这样做并不起作用:
但是我该如何导入/定义正确的环境变量呢?尝试这样做并不起作用:
if #available(iOS 15, *) {
@Environment(\.dismiss) var dismiss
} else {
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
}
编辑:
显然,在 iOS 15 Beta 4 上,仍可以使用 presentationMode
在导航堆栈中解除视图。除非在 NavigationView 中存在 TabView:
struct ContentView: View {
var body: some View {
NavigationView {
TabView {
NavigationLink(destination: ChildView()) {
Text("View Child")
}
}
}
}
}
struct ChildView: View {
@Environment(\.presentationMode) var presentationMode
var body: some View {
Button(action: {
print("Popping...")
self.presentationMode.wrappedValue.dismiss()
}, label: {
Text("POP")
.font(.headline)
})
}
}
presentationMode
在这种情况下无法工作。
@Environment
!为了忽略View,为什么不直接使用和处理原始值?并且忘记dismiss
和presentationMode
。 - ios coder