SwiftUI-自定义导航“;“后退”;按钮,奇怪地在视图之间来回跳跃

SwiftUI-自定义导航“;“后退”;按钮,奇怪地在视图之间来回跳跃,swiftui,Swiftui,情况是这样的,我已经设置了主视图/详细视图。从“事件”视图导航到“事件详细信息”视图时。如果用户点击“返回”按钮,我使用“按钮(操作:{self.presentationMode.wrappedValue.disease()})…”设计了“返回”按钮,则视图将临时更改回事件列表,但随后自动跳回用户导航的详细信息视图 以下是事件列表页面上的代码 import SwiftUI import Firebase struct EventsView: View { @Environment(\.pres

情况是这样的,我已经设置了主视图/详细视图。从“事件”视图导航到“事件详细信息”视图时。如果用户点击“返回”按钮,我使用“按钮(操作:{self.presentationMode.wrappedValue.disease()})…”设计了“返回”按钮,则视图将临时更改回事件列表,但随后自动跳回用户导航的详细信息视图

以下是事件列表页面上的代码

import SwiftUI
import Firebase

struct EventsView: View {
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
@State var data: [EventObject] = []

let db = Firestore.firestore()


var body: some View {
    ZStack {
        VStack {
            List {
                ForEach((self.data), id: \.self.eventID) { item in
                    NavigationLink(destination: EventDetail()) {
                    VStack {
                        HStack{
                            Text("\(item.eventDate)")
                                .font(.footnote)
                                .foregroundColor(Color("bodyText"))
                            Spacer()
                        }
                        HStack {
                            Text("\(item.eventTitle)")
                                .fontWeight(.bold)
                                .foregroundColor(Color("Charcoal"))
                            Spacer()
                        }.padding(.top, 8)
                    }.padding(.bottom, 16)

                } // nav

                }
                Spacer()
            }


                .padding(.top, 60)
        }
        //Floating Navbar
        ZStack {
            VStack {
                 GeometryReader { gr in
                     HStack {
                         Button(action: {self.presentationMode.wrappedValue.dismiss()}) {
                             Image(systemName: "chevron.left")
                                 .foregroundColor(Color("Charcoal"))
                                 .padding(.leading, 16)
                             HStack {
                                 Text("Explore · Disney Events")
                                     .font(.system(size: 15))
                                     .fontWeight(.bold)
                                     .foregroundColor(Color("Charcoal"))

                                     .padding()
                                 Spacer()
                             }
                         }.frame(width: gr.size.width * 0.92, height: 48)
                             .background(Color("navBackground"))

                             .cornerRadius(8)
                             .shadow(color: Color("Shadow"), radius: 10, x: 2, y: 7)

                     }.padding(.leading, 16)
                     Spacer()
                 }
             }
             .padding(.top, 50)
             .edgesIgnoringSafeArea(.top)
            // Floating Nav Ends
        }
    }.onAppear(perform: self.queryEvents)

}
func queryEvents() {
    self.data.removeAll()
    self.db.collectionGroup("events").getDocuments() {(querySnapshot, err) in
        if let err = err {
            print("Error getting documents \(err)")
        } else {
            for document in querySnapshot!.documents {
                let id = document.documentID
                let title = document.get("eventTitle") as! String
                let shortDesc = document.get("eventShort") as! String
                let description = document.get("eventDescription") as! String
                let date = document.get("eventDate") as! Timestamp
                let aDate = date.dateValue()
                let formatter = DateFormatter()
                formatter.dateFormat = "E, MMM d · h:mm a"
                let formattedTimeZoneStr = formatter.string(from: aDate)
                let address = document.get("eventAddress") as! String
                let cost = document.get("eventCost") as! Double
                let location = document.get("eventLocation") as! String
                let webURL = document.get("eventURL") as! String
                self.data.append(EventObject(id: id, title: title, shortDesc: shortDesc, description: description, date: formattedTimeZoneStr, address: address, cost: cost, location: location, webURL: webURL))
            }
        }
    }
}


}





class EventObject: ObservableObject {
@Published var eventID: String
@Published var eventTitle: String
@Published var eventShort: String
@Published var eventDescription: String
@Published var eventDate: String
@Published var eventAddress: String
@Published var eventCost: Double
@Published var eventLocation: String
@Published var eventURL: String


init(id: String, title: String, shortDesc: String, description: String, date: String, address: String, cost: Double, location: String, webURL: String) {
    eventID = id
    eventTitle = title
    eventShort = shortDesc
    eventDescription = description
    eventDate = date
    eventAddress = address
    eventCost = cost
    eventLocation = location
    eventURL = webURL
}
}
导入快捷界面
进口火基
结构事件视图:视图{
@环境(\.presentationMode)变量presentationMode:绑定
@状态变量数据:[EventObject]=[]
设db=Firestore.Firestore()
var body:一些观点{
ZStack{
VStack{
名单{
ForEach((self.data),id:\.self.eventID){item in
NavigationLink(目标:EventDetail()){
VStack{
HStack{
文本(“\(item.eventDate)”)
.font(.footnote)
.foregroundColor(颜色(“正文”))
垫片()
}
HStack{
文本(“\(item.eventTitle)”)
.fontWeight(.粗体)
.foregroundColor(颜色(“木炭”))
垫片()
}.padding(.top,8)
}.padding(.bottom,16)
}//导航
}
垫片()
}
.padding(.top,60)
}
//浮动导航条
ZStack{
VStack{
GeometryReader{gr in
HStack{
按钮(操作:{self.presentationMode.wrappedValue.disease()}){
图像(系统名称:“chevron.left”)
.foregroundColor(颜色(“木炭”))
.padding(.leading,16)
HStack{
文本(“探索·迪斯尼事件”)
.font(.system(大小:15))
.fontWeight(.粗体)
.foregroundColor(颜色(“木炭”))
.padding()
垫片()
}
}.框架(宽度:gr.size.width*0.92,高度:48)
.背景(颜色(“背景”))
.转弯半径(8)
阴影(颜色:颜色(“阴影”),半径:10,x:2,y:7)
}.padding(.leading,16)
垫片()
}
}
.padding(.top,50)
.edgesIgnoringSafeArea(.top)
//浮动导航端
}
}.onAppear(执行:self.queryEvents)
}
函数查询事件(){
self.data.removeAll()
中的self.db.collectionGroup(“事件”).getDocuments(){(querySnapshot,err)
如果让err=err{
打印(“获取文档时出错\(错误)”)
}否则{
用于querySnapshot!.documents中的文档{
让id=document.documentID
让title=document.get(“eventTitle”)作为!字符串
让shortDesc=document.get(“eventShort”)作为!字符串
让description=document.get(“eventDescription”)作为!字符串
让date=document.get(“eventDate”)作为!时间戳
设aDate=date.dateValue()
let formatter=DateFormatter()
formatter.dateFormat=“E,MMM d·h:mm a”
let formattedTimeZoneStr=formatter.string(from:aDate)
让address=document.get(“eventAddress”)作为!字符串
让cost=document.get(“eventCost”)为!Double
让location=document.get(“eventLocation”)作为!字符串
让webURL=document.get(“eventURL”)作为!字符串
self.data.append(EventObject(id:id,title:title,shortDesc:shortDesc,description:description,date:formattedTimeZoneStr,address:address,cost:cost,location:location,webURL:webURL))
}
}
}
}
}
类EventObject:ObservableObject{
@已发布的var-eventID:String
@已发布的var eventTitle:String
@已发布的var eventShort:String
@已发布的var eventDescription:字符串
@已发布的var eventDate:String
@已发布的var eventAddress:String
@已发布var事件成本:双
@已发布的var eventLocation:String
@已发布的var eventURL:String
init(id:String,title:String,shortDesc:String,description:String,date:String,address:String,cost:Double,location:String,webURL:String){
eventID=id
eventTitle=标题
eventShort=shortDesc
eventDescription=描述
eventDate=日期
eventAddress=地址
事件成本=成本
eventLocation=位置
eventURL=webURL
}
}
事件详细信息请参阅下面的代码。我试图把东西拿走以寻找原因。它似乎与Firebase呼叫无关

import SwiftUI
import Firebase
import MapKit

struct EventDetail: View {
@Environment(\.presentationMode) var presentationMode: 
Binding<PresentationMode>

//    var eventID: String
//    var eventTitle: String
//    var eventShort: String
//    var eventDescription: String
//    var eventDate: String
//    var eventAddress: String
//    var eventCost: Double
//    var eventLocation: String
//    var eventURL: String

    var body: some View {
        ZStack {

            VStack {
                GeometryReader { gr in
                    HStack {
                        Button(action:         {self.presentationMode.wrappedValue.dismiss()}) {
                            Image(systemName: "chevron.left")
                                .foregroundColor(Color("Charcoal"))
                                .padding(.leading, 16)
                            HStack {
                                Text("Events · Event Details")
                                    .font(.system(size: 15))
                                    .fontWeight(.bold)
                                    .foregroundColor(Color("Charcoal"))        
                                .padding()
                            Spacer()
                        }
                    }.frame(width: gr.size.width * 0.92, height: 48)
                        .background(Color("navBackground"))

                        .cornerRadius(8)
                        .shadow(color: Color("Shadow"), radius: 10, x: 2, y: 7)

                }.padding(.leading, 16)
                Spacer()
            }
        }
        .padding(.top, 50)
        .edgesIgnoringSafeArea(.top)



    }
}


}
导入快捷界面
进口火基
导入地图套件
结构EventDetail:视图{
@环境(\.presentationMode)变量presentationMode:
结合
//var-eventID:String
//var eventTitle:String
//var-eventShort:String
//var eventDescription:String
//var-eventDate:String
//var事件地址:字符串
//var事件成本:双倍
//var eventLocation:String
//var eventURL:String
var body:一些观点{
ZStack{
VStack{
GeometryReader{gr in
HStack{
按钮(操作:{self.presentationMode.wrappedValue.disease()}){
图像(系统名称:“chevron.left”)
struct EventsView: View {
    @State private var selectedItem: Int? = nil

    var body: some View {
        NavigationView {
            List {
                ForEach(0..<10, id: \.self) { item in
                    NavigationLink("Item \(item)", destination: EventDetail(selected: self.$selectedItem), tag: item, selection: self.$selectedItem)
                }
            }
        }
    }
}

struct EventDetail: View {
    @Binding var selected: Int?
    var body: some View {
        VStack {
            HStack {
                Button(action: { self.selected = nil }) {
                    Image(systemName: "chevron.left")
                    HStack {
                        Text("Events · Event Details")
                            .padding()
                        Spacer()
                    }
                }
                .navigationBarHidden(true)
                .navigationBarBackButtonHidden(true)
            }
            Spacer()
        }
    }
}