我是 SwiftUI 的新手,遇到了一些挑戰。每當我從主視圖轉到子視圖然后回傳主視圖時,我都會看到導航視圖中創建了額外的空間(請參閱鏈接的 GIF)。我想知道是否有人有任何建議 - 提前致謝!
這是主螢屏:
struct Home: View {
@State private var view2 = false
var body: some View {
NavigationView {
VStack {
Text("Home View!")
.padding()
NavigationLink(destination: View2(), isActive: $view2) { }
Button {
self.view2 = true
} label: {
Text("Go to next view")
}
}
.navigationTitle("Home")
}
} }
這是子新(View2):
struct View2: View {
@State private var home = false
var body: some View {
VStack {
Text("This is View 2")
.padding()
NavigationLink(destination: Home().navigationBarBackButtonHidden(true), isActive: $home) { }
Button {
self.home = true
} label: {
Text("Go to Home view")
}
}
.navigationTitle("View 1")
} }
鏈接到 GIF: 問題的視覺 GIF
uj5u.com熱心網友回復:
每次您Home通過 a推送一個新的時NavigationLink,您都會向NavigationView層次結構中添加另一個,因為其中Home有一個NavigationView。
為避免這種情況,您可以將NavigationViewout分開并鏈接到View:
struct Home: View {
var body: some View {
NavigationView {
View1() //<-- Here
}
}
}
struct View1 : View {
@State private var view2 = false
var body: some View {
VStack {
Text("Home View!")
.padding()
NavigationLink(destination: View2(), isActive: $view2) { }
Button {
self.view2 = true
} label: {
Text("Go to next view")
}
}
.navigationTitle("Home")
}
}
struct View2: View {
@State private var home = false
var body: some View {
VStack {
Text("This is View 2")
.padding()
NavigationLink(destination: View1() //<-- Here
.navigationBarBackButtonHidden(true), isActive: $home) { }
Button {
self.home = true
} label: {
Text("Go to Home view")
}
}
.navigationTitle("View 2")
}
}
話雖如此,我對這里的策略有點懷疑。它看起來像,而不是推一個新的 View1,你可能只是想打算回現有的一個。在這種情況下,您的代碼可能如下所示:
struct Home: View {
var body: some View {
NavigationView {
View1()
}
}
}
struct View1 : View {
@State private var view2 = false
var body: some View {
VStack {
Text("Home View!")
.padding()
NavigationLink(destination: View2(), isActive: $view2) { }
Button {
self.view2 = true
} label: {
Text("Go to next view")
}
}
.navigationTitle("Home")
}
}
struct View2: View {
@Environment(\.presentationMode) var presentationMode
var body: some View {
VStack {
Text("This is View 2")
.padding()
Button {
presentationMode.wrappedValue.dismiss()
} label: {
Text("Go to Home view")
}
}
.navigationTitle("View 2")
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/346111.html
標籤:ios 迅速 迅捷 swiftui-导航视图
