SwiftUI 通过 Navigationview 推送 View 在关闭后弹出 sheet

SwiftUI pushed View through Navigationview pops back after dismissing sheet

我有显示多个选项卡的 tabView。在主视图中,我有 navigationView,它有搜索按钮作为 navigationitem,推送到搜索视图。在呈现 sheet 并关闭它后的搜索视图中,searchView 弹出到主视图并再次推到顶部。这会导致搜索界面错位。 这是我的 tabView 代码:

    struct ContentView: View {
    var body: some View {
        TabView {
            homeView()
                .tabItem { Text("Home") }
        }
    }
}

这是 HomeView 的代码:

 struct homeView:View{
    @State var showSearch:Bool = false
    var body: some View{
        NavigationView{
            Text("home")
                .navigationBarTitle("", displayMode: .inline)
                .navigationViewStyle(StackNavigationViewStyle())
                .navigationBarItems(trailing: HStack{
                    NavigationLink.init("", destination: SearchContentView(), isActive: $showSearch)
                    Button.init("search", action: {
                    showSearch.toggle()
                })})
        }
    }
}

然后这是 searchView:

struct SearchContentView: View {
    @State private var isplayItem:Bool = false
    @State private var isEditing:Bool = false
    
    var body: some View {
        List(0..<30, rowContent: { i in
            Text("\(i)th")
                .onTapGesture {
                    isplayItem.toggle()
                }
                .sheet(isPresented: self.$isplayItem) {
                    Text("search Item \(i)")
                        .background(Color.blue)
                        .offset(x: 0, y: 0)
                }
        })
            .navigationBarTitle("search", displayMode: .inline)
            .navigationViewStyle(StackNavigationViewStyle())
    }
    
}

提前致谢。

目前在 navigationBarItems 中放置 NavigationLink 可能会导致一些问题。

尝试从 navigationBarItems 中删除 NavigationLink 并将其放入 background:

struct homeView: View {
    @State var showSearch: Bool = false
    var body: some View {
        NavigationView {
            Text("home")
                 // move `NavigationLink` outside `navigationBarItems`
                .background(NavigationLink("", destination: SearchContentView(), isActive: $showSearch))
                .navigationBarTitle("", displayMode: .inline)
                .navigationViewStyle(StackNavigationViewStyle())
                .navigationBarItems(trailing: HStack {
                    Button("search", action: {
                        showSearch.toggle()
                    })
                })
        }
    }
}