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

时间:2020-10-16 18:38:31

标签: swiftui watchos 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")

内部视图:

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)

更新: 在Canvas模拟器中,有一个后退按钮,而在常规模拟器中则没有。 画布:

Canvas

常规:

Regular

1 个答案:

答案 0 :(得分:2)

删除NavigationView,因此您的代码应为:

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