最小的可重现示例(Xcode 11.2 beta,在Xcode 11.1中有效):
struct Parent: View {
var body: some View {
NavigationView {
Text("Hello World")
.navigationBarItems(
trailing: NavigationLink(destination: Child(), label: { Text("Next") })
)
}
}
}
struct Child: View {
@Environment(\.presentationMode) var presentation
var body: some View {
Text("Hello, World!")
.navigationBarItems(
leading: Button(
action: {
self.presentation.wrappedValue.dismiss()
},
label: { Text("Back") }
)
)
}
}
struct ContentView: View {
var body: some View {
Parent()
}
}
Run Code Online (Sandbox Code Playgroud)
问题似乎在于将我放置NavigationLink在navigationBarItems嵌套于SwiftUI视图(其根视图为)的修改器内部NavigationView。崩溃报告表明,当我向前导航Child然后返回时,我试图弹出一个不存在的视图控制器Parent …
我想这可能是Beta 3中的一个错误,因为NavigationView都坏了。但是这样的观点:
struct GenreBadge : View {
@EnvironmentObject var store: Store<AppState>
let genre: Genre
var body: some View {
NavigationLink(destination: MoviesGenreList(genre: genre).environmentObject(store)) {
RoundedBadge(text: genre.name)
}
}
}
Run Code Online (Sandbox Code Playgroud)
没有触发导航堆栈中的任何推送。该视图似乎根本不是交互式的。如果有人发现解决方法会很好,除非Apple记录了此行为,否则我认为它会在Beta 4之前失效。
我以前没有注意到这一点,所以这可能是新版本的错误。
当我单击 NavigationLink 时,一切都按预期工作。然后我可以单击后退按钮(我已经使用默认后退按钮和自定义后退按钮完成了)并且它仍然有效。如果我再次尝试单击同一个 NavigationLink,它不会触发目的地。我可以单击不同的 NavigationLink,它会起作用,当我返回时,第一个链接再次起作用。只有最后一个链接不可用。
在列表、表单和免费导航链接中似乎就是这种情况。
有没有人遇到过这个功能?有解决办法吗?
使用 Xcode 版本 11.3 (11C29)
感谢您的帮助。