Ios 当回刷失败时,SwiftUI导航栏项目会失控

Ios 当回刷失败时,SwiftUI导航栏项目会失控,ios,navigation,swiftui,swipe,Ios,Navigation,Swiftui,Swipe,我有一个列表视图,任务视图,然后是编辑视图 流程是这样的:您有一个列表单元格,当在TasksView中点击一行时,点击该单元格可进入TasksView,然后进入EditView 当我半滑回以导航到上一个视图时,导航栏会出现边框和重叠。它主要发生在我使用navigationBarItem-(按钮)时 在TasksView(detailView)中有一个列表和一些导航栏修改器: ZStack { List { // code here } } .onAppear { UITable

我有一个
列表视图
任务视图
,然后是
编辑视图

流程是这样的:您有一个列表单元格,当在
TasksView
中点击一行时,点击该单元格可进入
TasksView
,然后进入
EditView

当我半滑回以导航到上一个视图时,导航栏会出现边框和重叠。它主要发生在我使用navigationBarItem-(按钮)时

TasksView(detailView)
中有一个列表和一些导航栏修改器:

ZStack {
   List {
    // code here
 }

}
.onAppear { UITableView.appearance().separatorStyle = .none }
.onDisappear { UITableView.appearance().separatorStyle = .none }
.background(Color("primaryBackground"))
.edgesIgnoringSafeArea(.bottom)
.navigationBarTitle("\(listItem.name ?? "")", displayMode: .inline)
.navigationBarItems(trailing:
    Button(action: {self.deleteList()}) {
              Image(systemName: "trash.circle.fill")
          }
     )
对于
EditView
,也可以这样说,当您在
EditView
上滑动一半以返回到
TasksView
时,同样的情况也会发生

下面是正在运行的bug:

有人知道如何着手修复这个错误吗

编辑:


上面的代码复制了这个bug。当你点击“这是一个测试”按钮,然后向后滑动一点,然后返回到最后一个视图时,你会看到导航栏乱了套

我找到了一个简单的解决方案来解决您的问题,请将此添加到NavigationView

    NavigationView {
        ....
    }.navigationViewStyle(StackNavigationViewStyle())
编辑:这是我用来在真实设备和各种模拟器上测试答案的代码。这解决了问题,如果你发现一个设备,这不工作,让我知道

import SwiftUI

struct ContentView: View {
var body: some View {
    NavigationView {
        VStack {
            NavigationLink(destination: DestinationView()) {
                Text("This is a test")
            }
        }.navigationBarTitle(Text("Master"), displayMode: .inline)
            .navigationBarItems(trailing:
                Button(action: {
                    print("tapped")
                }) {
                    Text("Button")
            })
    }.navigationViewStyle(StackNavigationViewStyle())
}
}

struct DestinationView: View {
@Environment(\.presentationMode) var presentationMode
var body: some View {
    List {
        Text("DestinationView")
            .padding(.top, 100)
            .navigationBarTitle(Text("Destination"), displayMode: .inline)
            .navigationBarItems(trailing: Button(action: {
                self.presentationMode.wrappedValue.dismiss()
            }, label: {
                Text("second")
            }))
    }
}
} 

我也曾为同样的问题挣扎过。所以我决定制作一个带有视图修改器的自定义导航栏,我正在使用它。 但我想我现在找到了另一个解决办法。 尝试在
导航链接
之后添加
.isDetailLink(false)

NavigationLink(destination: DestinationView()) {
    Text("This is a test")
}
.isDetailLink(false)


.toolbarToolbarItem一起使用,而不是使用较旧的。navigationBarItems解决了此问题

还请注意,我已将导航修饰符从文本移动到列表

下面是一个基于您的更新代码的工作和测试示例:

import SwiftUI

struct ContentView: View {
    
    var body: some View {
        NavigationView {
            VStack {
                NavigationLink(destination: DestinationView()) {
                    Text("This is a test")
                }
            }
            .navigationBarTitle(Text("Master"), displayMode: .inline)
            
            // use .toolbar instead of .navigationBarItems
            .toolbar {
                ToolbarItem(placement: .navigationBarTrailing){
                    Button("Button", action: {
                        print("tapped")
                    })
                }
            }
            
        }
    }
}

struct DestinationView: View {
    
    @Environment(\.presentationMode) var presentationMode
    var body: some View {
        
        List {
            Text("DestinationView")
                .padding(.top, 100)
        }
        .navigationBarTitle(Text("Destination"), displayMode: .inline)
        // use .toolbar instead of .navigationBarItems
        .toolbar {
            ToolbarItem(placement: .navigationBarTrailing){
                Button("second", action: {
                    self.presentationMode.wrappedValue.dismiss()
                })
            }
        }
        
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

这并不能解决问题。我已经更新了答案,以准确显示我正在使用的代码。我已经在真实设备和各种模拟器上测试过了,没有任何问题。您能告诉我们在什么设备/系统上此代码不适用于您吗。我在mac 10.15、target ios 13.5和mac catalyst上使用了Xcode 11.5和11.6 beta版。我在iPad上测试过它,无论有没有我的添加,它都运行良好。你有解决方案不起作用的设备吗?为我解决了。为我工作!
NavigationLink(destination: DestinationView()) {
    Text("This is a test")
}
.isDetailLink(false)

import SwiftUI

struct ContentView: View {
    
    var body: some View {
        NavigationView {
            VStack {
                NavigationLink(destination: DestinationView()) {
                    Text("This is a test")
                }
            }
            .navigationBarTitle(Text("Master"), displayMode: .inline)
            
            // use .toolbar instead of .navigationBarItems
            .toolbar {
                ToolbarItem(placement: .navigationBarTrailing){
                    Button("Button", action: {
                        print("tapped")
                    })
                }
            }
            
        }
    }
}

struct DestinationView: View {
    
    @Environment(\.presentationMode) var presentationMode
    var body: some View {
        
        List {
            Text("DestinationView")
                .padding(.top, 100)
        }
        .navigationBarTitle(Text("Destination"), displayMode: .inline)
        // use .toolbar instead of .navigationBarItems
        .toolbar {
            ToolbarItem(placement: .navigationBarTrailing){
                Button("second", action: {
                    self.presentationMode.wrappedValue.dismiss()
                })
            }
        }
        
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}