【问题标题】:NavigationLink calling destination multiple timesNavigationLink 多次调用目的地
【发布时间】:2020-05-06 13:41:03
【问题描述】:

在 Xcode 版本 11.4.1 (11E503a) 中设置 NavigationLink 时:

NavigationView { 
  vm.isShowingBarCharts ? Text("Charts") : Text("List")
}.navigationBarItems(
                NavigationLink(destination: LEditView(vm: LEditViewModel())) {
                    LIcons.addEntry
                        .resizable()
                        .frame(width: 20, height: 20)
                }
)

vm.isShowingBarCharts 是 Bool 类型的 Published,如果 vm.isShowingBarCharts 被翻转,视图会重新绘制(如预期的那样)。我不明白的是,为什么要实例化多个 LEditViewModel() 实例?

如何避免?

【问题讨论】:

  • 不要在导航栏中使用NavigationLink - 只能在NavigationView内部使用
  • 将按钮移出 .navigationBarItems() 并没有改变任何东西。
  • 在创建父视图并且从未释放(例如在后退按钮单击时)时初始化视图模型也很奇怪。无法绕开它......
  • @Asperi 这里是一个示例项目。 github.com/andriansergheev/BrokenNavigationLinkSwiftUI

标签: swift swiftui


【解决方案1】:

在 Xcode 12.1(12A7403) iOS 14.0 + 中,这可以通过使用 @StateObject 属性包装器来修复。 如果不使用@StateObject,则每次重新绘制父级时都会实例化VM。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-09
    • 1970-01-01
    • 2021-10-24
    • 2020-08-27
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 2021-05-29
    相关资源
    最近更新 更多