【发布时间】:2021-06-14 12:28:43
【问题描述】:
我有一个使用 Swift + Swift UI + AppDelegate LifeCycle 编写的简单 macOS 应用程序。
我想使用 NavigationView 在我的应用程序中添加左侧边栏。
一切都很好,但是当我在 NavigationView 中的视图之间切换时 - 每次我点击 NavigationLink 时它们都会重新初始化。
你可以在下面我的 GIF 中看到它。我在每个视图的文本中添加了 arc4random() 函数,当我要进入下一个视图并返回时,文本中的值会发生变化。它告诉我我的视图已重新初始化。
我不想将那个伪生成的随机值保存在变量中,我只想让 NavigationLink 不重新初始化视图。我想重用它们(以前保存的状态:即滚动位置、列表中的元素和其他)。
因为每次我在 NavigationView 中的视图之间切换时 - RAM 使用量都会增加 +0.1MB。
是的,它一点也不多,但我认为这不正常。
import SwiftUI
//Dummy View #1
struct HelloWorldView: View {
var body: some View {
Text("This is HelloWorld View --> \(arc4random())").bold()
}
}
//Dummy View #2
struct GoodbyeWorldView: View {
var body: some View {
Text("This is GoodbyeWorldView \(arc4random())").bold()
}
}
struct ContentView: View {
@State private var selection: String?
var body: some View {
NavigationView {
List (selection: $selection) {
Section(header: Text("Top")) {
NavigationLink(destination: HelloWorldView()) {
Text("First")
}
NavigationLink(destination: GoodbyeWorldView()) {
Text("Second")
}
}
}.listStyle(SidebarListStyle())
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
What I want to have (Example): [Image]
那么如何重用我之前的视图状态呢?
【问题讨论】:
-
您好,欢迎来到 SO。看这个。它可能会对您所看到的内容有所帮助。 developer.apple.com/videos/play/wwdc2021/10022
标签: swift xcode macos swiftui appdelegate