【问题标题】:SwiftUI pushed View through Navigationview pops back after dismissing sheetSwiftUI通过Navigationview推送视图在关闭工作表后弹出
【发布时间】:2021-04-10 06:01:24
【问题描述】:

我有显示多个标签的 tabView。在主页视图中,我有具有搜索按钮作为导航项的导航视图,它推动搜索视图。在呈现工作表并将其关闭后的搜索视图中,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())
    }
    
}

提前致谢。

【问题讨论】:

  • 这需要调试,您能提供最小的可重现示例吗? (提供的代码不可测试)
  • @Asperi 我将代码更改为一个简单且可测试的示例。感谢您的帮助:)
  • @pawello2222 不,这对我的问题没有帮助:(

标签: swift swiftui navigation


【解决方案1】:

目前在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()
                    })
                })
        }
    }
}

【讨论】:

  • 感谢您的回复,您的解决方案似乎工作正常 :)
猜你喜欢
  • 2022-01-01
  • 1970-01-01
  • 2020-04-09
  • 1970-01-01
  • 2020-05-23
  • 1970-01-01
  • 2023-01-12
  • 2021-11-19
  • 2020-06-04
相关资源
最近更新 更多