SwiftUI 导航链接和@State 在“onAppear()”中有问题
Posted
技术标签:
【中文标题】SwiftUI 导航链接和@State 在“onAppear()”中有问题【英文标题】:SwiftUI navigation link and @State have problem in "onAppear()" 【发布时间】:2021-10-07 14:07:52 【问题描述】:我有一个视图堆栈,例如 root -> subViewA -> subViewB,我将一个 @State var 传递给彼此的视图,这个 var 是控制显示或隐藏的东西,这是我的代码:
struct RootView: View
@State var show: Bool = true
var body: some View
ZStack(alignment: Alignment(horizontal: .center, vertical: .bottom))
NavigationView
NavigationLink(
destination: SubViewA(show: $show),
label:
Text("to Sub View A")
.onAppear
show = true
print("Conntent View appear")
)
RoundedRectangle(cornerRadius: 20)
.frame(width: 400, height: 70)
.foregroundColor(.blue)
.offset(y: show ? 0 : 500)
struct SubViewA: View
@Binding var show: Bool
var body: some View
NavigationLink(
destination: SubViewB(show: $show),
label:
Text("to Sub View B")
.onAppear
show = true
print("sub View A appear")
)
struct SubViewB: View
@Binding var show: Bool
var body: some View
Text("Sub View B")
.onAppear
show = false
print("Sub View B appear")
控制台输出是:
Conntent View appear
sub View A appear
2021-08-02 15:22:58.284604+0800 NavigationLink[32349:489749] [Assert] displayModeButtonItem is internally managed and not exposed for DoubleColumn style. Returning an empty, disconnected UIBarButtonItem to fulfill the non-null contract.
Sub View B appear
Conntent View appear
当导航到 subViewB 时,输出是“出现子视图 B”和“出现内容视图”,为什么它会打印 rootView 的 onappear() 信息?我该如何解决?
【问题讨论】:
在 macos 12.beta、xcode 13.beta、target ios 15 和 macCatalyst 上按预期工作,对我来说没有任何问题。在旧系统上可能会有所不同。 感谢您的回复。我的 macOS 11.4,Xcode 12.5.1,目标 iOS 14。这可能是系统错误? 绑定是一种双向连接状态是事实的来源。您只有一个触发所有导航链接的事实来源。 @loremipsum,我不明白你的意思,你能告诉我更多吗?谢谢! 你的状态显示和隐藏所有链接 【参考方案1】:我有同样的问题.... 似乎发生在 iOS 15.0 设备下。 我的设备版本是 iOS 14.4。但 iOS 15.2 模拟器运行良好。
rootView 的 onAppear 会在第二个子级推送时被调用,在弹出所有视图时也会调用 rootView 的 onAppear。
【讨论】:
这并不能真正回答问题。如果您有其他问题,可以点击 进行提问。要在此问题有新答案时收到通知,您可以follow this question。一旦你有足够的reputation,你也可以add a bounty 来引起对这个问题的更多关注。 - From Review以上是关于SwiftUI 导航链接和@State 在“onAppear()”中有问题的主要内容,如果未能解决你的问题,请参考以下文章