0

我编写了一个简单的 Swift UI 应用程序,它在导航工具栏上创建一个 NavigationLink,并在显示的底部创建一个状态栏。单击导航栏上的齿轮链接时,它会将您带到子视图,但是当您返回父视图时,状态栏会被隐藏。如果单击屏幕中间的 NavigationLink 并返回父视图,状态栏将再次显示。

这看起来像 Swift UI 中的一个错误,有人知道如何修复吗?

import SwiftUI

struct ContentView: View {
    var body: some View {
        NavigationView {
            NavigationLink(destination: Text("Child view")) {
                Text("Hello, World!")
            }
            .toolbar {
                ToolbarItem(placement: .navigationBarTrailing, content: { 
                    NavigationLink(destination: Text("Settings view"),
                        label: { Image(systemName: "gearshape.fill")
                    })
                })
                ToolbarItem(placement: .status, content: {
                    Text("Checking for messages...") 
                })
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
4

1 回答 1

0

问题是 Swift UI 在工具栏中无法NavigationLink正确处理。

解决方法是将 aButton放入工具栏中并NavigationLink在代码中使用隐藏。

这是解决我的问题的答案的链接。 SwiftUI - 使工具栏的 NavigationLink 使用详细视图

这是使用解决方法实现我的原始代码的代码。

struct ContentView: View {
    @State var settingsLinkSelected = false
    var body: some View {
        NavigationView {
            NavigationLink(destination: Text("Second view")) {
                Text("Hello, World!")
            }
            .toolbar {
                ToolbarItem(placement: .navigationBarTrailing,
                            content: { Button(action: { settingsLinkSelected = true },
                            label: { Image(systemName: "gearshape.fill") }) })
                ToolbarItem(placement: .status, 
                            content: { Text("Checking for messages...") })
            }
            .background(
                NavigationLink(
                    destination: Text("Settings View"),
                    isActive: $settingsLinkSelected
                ) {
                    EmptyView()
                }.hidden()
            )
        }
    }
}

于 2021-09-23T04:32:49.323 回答