给出以下最小的可重现示例:
struct ParentView: View {
@State private var showSheet = false
var body: some View {
return Button("Show sheet") {
showSheet.toggle()
}.sheet(
isPresented: $showSheet,
onDismiss: {
print("Parent onDismiss")
},
content: {
NavigationView {
SheetView(parentShowSheet: $showSheet)
}
}
)
}
}
struct SheetView: View {
@Environment(\.dismiss) private var dismiss
@Environment(\.isPresented) private var isPresented
@Binding var parentShowSheet: Bool
var body: some View {
Button("Manual close") {
dismiss()
}
.onChange(of: isPresented) { isPresented in
print("Sheet isPresented", isPresented)
}
.onChange(of: parentShowSheet) { parentShowSheet in
print("Sheet parentShowSheet", parentShowSheet)
}
}
}
Run Code Online (Sandbox Code Playgroud)
的SheetView方法onChange没有按照我期望的方式触发。在此示例中,有两种方法可以在打开工作表后将其关闭:
dismiss(),或.interactiveDismissDisabled(true)下拉工作表以触发“交互式关闭”(添加到视图时禁用的东西)。如果您尝试这两种方法,您会发现,对于 (1),您将得到两个打印语句“Sheet ParentShowSheet”和“Parent onDismiss”,而对于 (2),您只会得到一个打印语句“Parent onDimiss”。
三个问题:
Environment(\.isPresented)价值。SheetView添加一个钩子(例如,其操作类似于我的 onChange 方法,但实际上在两种情况下都有效)?| 归档时间: |
|
| 查看次数: |
885 次 |
| 最近记录: |