【问题标题】:How to reuse view in NavigationView when using with NavigationLink?与 NavigationLink 一起使用时如何重用 NavigationView 中的视图?
【发布时间】:2021-06-14 12:28:43
【问题描述】:

我有一个使用 Swift + Swift UI + AppDelegate LifeCycle 编写的简单 macOS 应用程序。

我想使用 NavigationView 在我的应用程序中添加左侧边栏。
一切都很好,但是当我在 NavigationView 中的视图之间切换时 - 每次我点击 NavigationLink 时它们都会重新初始化。

你可以在下面我的 GIF 中看到它。我在每个视图的文本中添加了 arc4random() 函数,当我要进入下一个视图并返回时,文本中的值会发生变化。它告诉我我的视图已重新初始化。

What I have now: [Image]

我不想将那个伪生成的随机值保存在变量中,我只想让 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]

那么如何重用我之前的视图状态呢?

【问题讨论】:

标签: swift xcode macos swiftui appdelegate


【解决方案1】:

SwiftUI 不提供大量自定义。您可以简单地 ZStack 您的视图并更改不透明度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    • 2021-01-12
    相关资源
    最近更新 更多