【发布时间】:2020-02-29 17:58:47
【问题描述】:
我依靠 SwiftUI 的 .onDisappear 来执行一些逻辑,但是当用户使用滑动手势关闭模态呈现的视图时,它不会被调用。重现
- 以“ChildView 1”模式呈现视图
- 在此视图中,将“ChildView 2”推送为子导航
- 向下滑动可关闭模式视图。
“ChildView 2”的 .onDisappear 没有被调用。
要重现的示例代码
import SwiftUI
struct ContentView: View {
@State var isShowingModal
var body: some View {
NavigationView {
Button(action: {
self.isShowingModal.toggle()
}) {
Text("Show Modal")
}
}
.sheet(isPresented: $isShowingModal) {
NavigationView {
ChildView(title: 1)
}
}
}
}
struct ChildView: View {
let title: Int
var body: some View {
NavigationLink(destination: ChildView(title: title + 1)) {
Text("Show Child")
}
.navigationBarTitle("View \(title)")
.onAppear {
print("onAppear ChildView \(self.title)")
}
.onDisappear {
print("onDisappear ChildView \(self.title)")
}
}
}
输出是:
onAppear ChildView 1
onAppear ChildView 2
onDisappear ChildView 1
【问题讨论】:
-
.onAppear在视图被添加到视图层次结构时被调用,.onDisappear在被移除时被调用。在您的用例中,ChildView 2不会从超级视图中删除 - 已删除窗口。一般来说,以防万一,将逻辑移到那里不是可靠的方法。 -
@Asperi 我认为这是解释原因的最相关的答案。