【发布时间】:2022-01-23 08:20:59
【问题描述】:
概述:
- 在
macOS上使用NavigationLink时,源视图出现两次。 - 它只发生在
macOS上(参见print语句)
问题:
- 如何解决这个问题?
- 有解决方法吗?
代码:
import SwiftUI
struct ContentView: View {
let names = ["aaa"]
var body: some View {
NavigationView {
List {
ForEach(names, id: \.self) { name in
NavigationLink(destination: Text("dest")) {
Text(name)
.onAppear {
print("\(name) appeared")
}
}
}
}
}
}
}
【问题讨论】:
-
SwiftUI 自 iOS14 发布以来得到了很大的改进,但导航视图/导航链接仍然不稳定,在我的情况下,它是本地化的导航栏标题。所以应该等待下一个版本或向苹果提交错误
-
不要依赖 onAppear 的调用次数,它不(也不会)由我们控制。在 Apple 的愿景中,它的意思是“出现在视图层次结构中”而不是“在屏幕上”,并且在视图层次结构中它可能出现的次数与构造的次数一样多(在屏幕上可见之前),这可能取决于很多事情。
-
@Asperi 问题是我在列表中有一个 TextField,所以它被重新创建了两次,导致抛出一些警告,绑定被多次更改