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)
将.toolbar与ToolbarItem一起使用,而不是使用较旧的。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()
}
}