我有一个使用 NavigationDestination 修饰符确定导航的新 iOS 16 SwiftUI NavigationStack,它运行良好。
我的问题是:为什么在清除 NavigationPath 时,在堆栈中深度超过一个视图时,它不能通过平滑地向后滑动到根视图来进行动画处理?
如果您只有一层,则可以正常工作,但是如果比这更低,则称为“跳转到根”的操作只会跳回根视图,而不会有滑动动画。
这是“特性”还是错误或我做错了什么?
重现问题的步骤
- 运行下面的示例代码。
- 单击第一个导航链接,然后单击“Pop To Root View” - 注意,它会平稳地滑回根视图。
- 单击第一个或第二个链接 - 然后单击“导航到视图3”,它会显示视图3。
- 然后单击“弹出到根”,您会注意到它会跳回根视图,而不是滑回来。 这就是我的问题-它应该跳回还是滑回来?
问题演示
演示代码(使用 Xcode 14.0 和 iOS 16.0):
import SwiftUI
struct DemoPop: View {
@State private var path = NavigationPath()
var body: some View {
VStack {
NavigationStack(path: $path) {
List {
Section("List One") {
NavigationLink("Navigate to View 1", value: "View 1")
NavigationLink("Navigate to View 2", value: "View 2")
}
}
.navigationDestination(for: String.self) { textDesc in
VStack {
Text(textDesc).padding()
Button("Navigate to View 3") {
path.append("View 3")
}.padding()
Button("Pop to Root View") {
path.removeLast(path.count)
}.padding()
}
}
.navigationTitle("Test Pop To Root")
}
}
}
}
struct DemoPop_Previews: PreviewProvider {
static var previews: some View {
DemoPop()
}
}
更新1:
认为上述代码正确,因此可能是评论中提到的一个错误,因为我刚刚看到了一个YouTube视频,展示了相同的行为 - Youtube教程 - 在时间线19:25左右 - 您将看到弹出到根目录只会跳回起点。
更新2:
iOS 16.2中已经修复了这个问题。