SwiftUI 的 NavigationView 缺少 Apple Watch 上的后退按钮

Sha*_*har 3 watchos swiftui swiftui-navigationlink

我使用 SwiftIU 创建了一个 Apple Watch 应用。应用程序的主视图是一个列表,带有到另一个列表的 NavigationLink。当我在内部列表之一中时,后退按钮不在视图的顶部。但是当我从屏幕一侧滑动时(比如在 iOS 上),我会回到主视图。

有没有办法将后退按钮添加回屏幕顶部?新手势是 watchOS 7 的新“后退按钮”吗?

Xcode 12.2(测试版 3)。Apple Watch S6(模拟器,7.1)和 Apple Watch S5(真实,7.0)。SwiftIU 2.0

主要观点:

NavigationView {
    List {
        ForEach(listsModel.lists) { (list) in
            NavigationLink(destination: ListView(list: list)
                            .environmentObject(list.rowsModel)) {
                ListsRowView(list: list)
            }
        }
    }
}
.onAppear {
    listsModel.update()
}
.navigationTitle("ListsView.NavigationTitle")
Run Code Online (Sandbox Code Playgroud)

内部观点:

List(rowsModel.rows) { (row) in
    RowView(row: row, shouldUpdate: $shouldUpdate)
}
.navigationBarHidden(false)
.onAppear {
    instantiateTimer()
    rowsModel.update()
}
.onDisappear {
    cancelTimer()
}
.onReceive(timer) { _ in
    if shouldUpdate {
        rowsModel.update()
    }
}
.navigationTitle(list.name)
Run Code Online (Sandbox Code Playgroud)

更新:在 Canvas 模拟器中,有一个后退按钮,但在常规模拟器中,它没有。帆布:

帆布

常规的:

常规的

Boo*_* PT 10

删除 NavigationView,因此您的代码将是:

List {
   ForEach(listsModel.lists) { (list) in
        NavigationLink(destination: ListView(list: list)
              .environmentObject(list.rowsModel)) {
        ListsRowView(list: list)
        }
    }
}
.onAppear {
    listsModel.update()
}
.navigationTitle("ListsView.NavigationTitle")
Run Code Online (Sandbox Code Playgroud)

这样做的原因是 watchOS 总是NavigationView默认添加系统

  • 这次真是万分感谢!我一直在努力寻找导航被破坏的原因,并从所有子视图中删除 NavigationView 完全修复了它!:) (2认同)