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()
})
})
}
}
}
我有显示多个选项卡的 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()
})
})
}
}
}