swiftui - SwiftUI 元素在视图之间向下移动
问题描述
我有两种看法
import SwiftUI
import CoreData
struct ContentView: View {
var body: some View {
NavigationView {
VStack {
Image("qr-code")
.resizable()
.scaledToFit()
.position(x: 100, y: 100)
.offset(x: 100)
Text("Thank you")
.position(x: 200)
}.toolbar{
ToolbarItemGroup(placement: .bottomBar) {
NavigationLink(destination: ContentView().navigationBarBackButtonHidden(true)) {
Text("Show QR")
}
Spacer()
NavigationLink(destination: CustomizeView().navigationBarBackButtonHidden(true)) {
Text("Customize")
}
}
}
}
}
}
struct CustomizeView: View {
var body: some View {
List {
Section(header: Text("Important tasks")) {
Text("Task data goes here")
Text("Task data goes here")
}
}.toolbar{
ToolbarItemGroup(placement: .bottomBar) {
NavigationLink(destination: ContentView().navigationBarBackButtonHidden(true)) {
Text("Show QR")
}
Spacer()
NavigationLink(destination: CustomizeView().navigationBarBackButtonHidden(true)) {
Text("Customize")
}
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
Group {
ContentView().environment(\.managedObjectContext, PersistenceController.preview.container.viewContext)
CustomizeView().environment(\.managedObjectContext, PersistenceController.preview.container.viewContext)
}
}
}
当我单击自定义并单击显示时,我看到图片向下移动。这是预期的行为吗?无论我点击了多少导航按钮,如何确保所有元素都位于相同的位置?
解决方案
您的视图层次结构中应该只有一个NavigationView
。
现在,有NavigationView
sContentView
和CustomizeView
任何时候你用 导航到任何一个NavigationLink
,它都会在视图中添加一个额外的导航栏,向下推你的内容。
要解决此问题,您的根视图可能只是s NavigationView
,然后您的链接可以导航到不包含附加NavigationView
s 的视图。
struct ContentView: View {
var body: some View {
NavigationView {
BasicView()
}
}
}
struct BasicView : View {
var body: some View {
VStack {
Image(systemName: "pencil")
.resizable()
.scaledToFit()
.position(x: 100, y: 100)
.offset(x: 100)
Text("Thank you")
.position(x: 200)
}.toolbar{
ToolbarItemGroup(placement: .bottomBar) {
NavigationLink(destination: BasicView().navigationBarBackButtonHidden(true)) {
Text("Show QR")
}
Spacer()
NavigationLink(destination: CustomizeView().navigationBarBackButtonHidden(true)) {
Text("Customize")
}
}
}
}
}
struct CustomizeView: View {
var body: some View {
List {
Section(header: Text("Important tasks")) {
Text("Task data goes here")
Text("Task data goes here")
}
}.toolbar{
ToolbarItemGroup(placement: .bottomBar) {
NavigationLink(destination: BasicView().navigationBarBackButtonHidden(true)) {
Text("Show QR")
}
Spacer()
NavigationLink(destination: CustomizeView().navigationBarBackButtonHidden(true)) {
Text("Customize")
}
}
}
}
}
推荐阅读
- spring - Spring Boot - 类路径清单属性
- r - 按两组比较两个数值变量
- jquery - ReactJS 中的 jQuery dataTable 库是否有包装器组件?
- xslt - XPath Java 库(也评估函数)
- php - 如何获取 sql 查询作为输出,如本图所示
- javascript - Javascript类变量重新分配
- python - 如何在 python tkinter 中的函数后停止此操作
- sql - 如何在 SQL 的递归 cte 中实现双重 SELECT?
- python - 创建具有固定值的列
- sharepoint - 获取和错误,如 SPFX webpart“不支持在网站集应用程序目录上部署域隔离包”。