【发布时间】:2020-11-24 21:09:13
【问题描述】:
如果有任何更改,我会在标签项出现时调用 API。为什么在调用 onDisappear 之后调用 onAppear?
这是一个简单的例子:
struct ContentView: View {
var body: some View {
TabView {
NavigationView {
Text("Home")
.navigationTitle("Home")
.onAppear {
print("Home appeared")
}
.onDisappear {
print("Home disappeared")
}
}
.tabItem {
Image(systemName: "house")
Text("Home")
}.tag(0)
NavigationView {
Text("Account")
.navigationTitle("Account")
.onAppear {
print("Account appeared")
}
.onDisappear {
print("Account disappeared")
}
}
.tabItem {
Image(systemName: "gear")
Text("Account")
}.tag(1)
}
}
}
只要运行上面的代码,我们就会在 onDisappear 之后看到 onAppear。
Home appeared
---After switch tab to Account---
Home disappeared
Account appeared
Home appeared
有什么办法可以避免这种情况吗?
【问题讨论】:
-
您无法控制 SwiftUI 如何刷新视图,最好不要依赖它。为什么要避免多个
onAppear? -
因为在切换选项卡后刷新整个视图时调用嵌套视图(tab>navigation>view1>view2)的初始化。
-
why 对我来说不是建设性问题...您是否考虑根据您尝试实现(或解决)什么来重新提出您的问题,然后...有人可能会发现如何做到这一点。
-
我不知道为什么围绕这个问题的消极情绪。多年来,我们一直依赖 viewWillAppear / viewWillDisappear 以某种方式工作。在 iOS14 Beta 上运行 iOS13 编译的应用程序时,我也遇到了同样的问题。当推送一个详细信息屏幕时,再次调用 NavigationView 中的 .onAppear。
-
您找到解决方案了吗?这似乎仍然是 iOS 14 稳定版中的行为。