SwiftUI NavigationBarItems slideBack 冻结应用程序
SwiftUI NavigationBarItems slideBack freezes app
我的 HomeView
(我在其中存储 Movies
的列表)有 NavigationView
和 NavigationLink
,目的地为 DetailView
。
当我想在我的 DetailView
中添加 NavigationBarItems
时,它使我的 GoBack Slide(从 DetailView
到 HomeView
) 没用。当我在屏幕的 ~1/3 处停止滑动时,应用程序冻结。
我在 DetailView
中没有额外的 NavigationView
,因为当我有它时,我在 DetailView
.
中加倍了
我发现了破坏一切的代码行。
它是 NavigationBarItems
的一部分:
.navigationBarItems(trailing: Button(action: {
self.showingEditScreen.toggle()
}) {
Image(systemName: "pencil")
.imageScale(.large)
.accessibility(label: Text("Edit Movie"))
.padding()
})
和HomeView
:
struct HomeView: View {
@Environment(\.managedObjectContext) var moc
@FetchRequest(entity: Movie.entity(), sortDescriptors: [
NSSortDescriptor(keyPath: \Movie.title, ascending: true),
NSSortDescriptor(keyPath: \Movie.director, ascending: true)
]) var movies: FetchedResults<Movie>
@State private var showingAddScreen = false
func deleteMovie(at offsets: IndexSet) {
for offset in offsets {
let movie = movies[offset]
moc.delete(movie)
}
try? moc.save()
}
var body: some View {
NavigationView {
List {
ForEach(movies, id: \.self) { movie in
NavigationLink(destination: DetailMovieView(movie: movie)) {
EmojiRatingView(rating: movie.rating)
.font(.largeTitle)
VStack(alignment: .leading) {
Text(movie.title ?? "Unknown Title")
.font(.headline)
Text(movie.director ?? "Unknown Director")
.foregroundColor(.secondary)
}
}
}
.onDelete(perform: deleteMovie)
}
.navigationBarTitle("Movie Store")
.navigationBarItems(leading: EditButton(), trailing: Button(action: {
self.showingAddScreen.toggle()
}) {
Image(systemName: "plus")
.imageScale(.large)
//.accessibility(label: Text("Add Movie"))
.padding()
})
.sheet(isPresented: $showingAddScreen) {
AddMovieView().environment(\.managedObjectContext, self.moc)
}
}
}
}
目前这是 SwiftUI 的一个错误。如果您的 DetailView
中有 .sheet
and/or 和 .alert
,请删除它们,它会按预期运行,应用程序不会冻结。
我的 HomeView
(我在其中存储 Movies
的列表)有 NavigationView
和 NavigationLink
,目的地为 DetailView
。
当我想在我的 DetailView
中添加 NavigationBarItems
时,它使我的 GoBack Slide(从 DetailView
到 HomeView
) 没用。当我在屏幕的 ~1/3 处停止滑动时,应用程序冻结。
我在 DetailView
中没有额外的 NavigationView
,因为当我有它时,我在 DetailView
.
我发现了破坏一切的代码行。
它是 NavigationBarItems
的一部分:
.navigationBarItems(trailing: Button(action: {
self.showingEditScreen.toggle()
}) {
Image(systemName: "pencil")
.imageScale(.large)
.accessibility(label: Text("Edit Movie"))
.padding()
})
和HomeView
:
struct HomeView: View {
@Environment(\.managedObjectContext) var moc
@FetchRequest(entity: Movie.entity(), sortDescriptors: [
NSSortDescriptor(keyPath: \Movie.title, ascending: true),
NSSortDescriptor(keyPath: \Movie.director, ascending: true)
]) var movies: FetchedResults<Movie>
@State private var showingAddScreen = false
func deleteMovie(at offsets: IndexSet) {
for offset in offsets {
let movie = movies[offset]
moc.delete(movie)
}
try? moc.save()
}
var body: some View {
NavigationView {
List {
ForEach(movies, id: \.self) { movie in
NavigationLink(destination: DetailMovieView(movie: movie)) {
EmojiRatingView(rating: movie.rating)
.font(.largeTitle)
VStack(alignment: .leading) {
Text(movie.title ?? "Unknown Title")
.font(.headline)
Text(movie.director ?? "Unknown Director")
.foregroundColor(.secondary)
}
}
}
.onDelete(perform: deleteMovie)
}
.navigationBarTitle("Movie Store")
.navigationBarItems(leading: EditButton(), trailing: Button(action: {
self.showingAddScreen.toggle()
}) {
Image(systemName: "plus")
.imageScale(.large)
//.accessibility(label: Text("Add Movie"))
.padding()
})
.sheet(isPresented: $showingAddScreen) {
AddMovieView().environment(\.managedObjectContext, self.moc)
}
}
}
}
目前这是 SwiftUI 的一个错误。如果您的 DetailView
中有 .sheet
and/or 和 .alert
,请删除它们,它会按预期运行,应用程序不会冻结。