SwiftUI通过NavigationView推出的视图,在关闭sheet之后会弹回。

3

我有一个TabView来展示多个选项卡。在主页视图中,我有一个NavigationView,其导航项为搜索按钮,并会推出搜索视图。在搜索视图中,当展示一个sheet并将其关闭后,搜索视图会被弹回到主页视图并再次推到顶部。这会导致搜索界面的错位。 以下是我的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())
    }
    
}

感谢您的提前帮助。

这需要调试,您能提供一个最小可重现的示例吗?(提供的代码无法测试) - Asperi
@Asperi,我将代码更改为简单且可测试的示例。感谢您的帮助 :) - mzoko .T.K
这个回答解决了你的问题吗?NavigationView在弹回根视图时省略了中间视图 - pawello2222
@pawello2222,这并没有帮助到我的问题 :( - mzoko .T.K
1个回答

1

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

尝试将 NavigationLinknavigationBarItems 中移除并将其放入 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()
                    })
                })
        }
    }
}

感谢您的回复,您的解决方案似乎正常工作 :) - mzoko .T.K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接