SwiftUI 的 NavigationView 在 Apple Watch 上缺少后退按钮
SwiftUI's NavigationView Is Missing The Back Button On Apple Watch
我使用 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:
常规:
删除 NavigationView,因此您的代码将是:
List {
ForEach(listsModel.lists) { (list) in
NavigationLink(destination: ListView(list: list)
.environmentObject(list.rowsModel)) {
ListsRowView(list: list)
}
}
}
.onAppear {
listsModel.update()
}
.navigationTitle("ListsView.NavigationTitle")
这是因为 watchOS 总是默认添加系统 NavigationView
我使用 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:
常规:
删除 NavigationView,因此您的代码将是:
List {
ForEach(listsModel.lists) { (list) in
NavigationLink(destination: ListView(list: list)
.environmentObject(list.rowsModel)) {
ListsRowView(list: list)
}
}
}
.onAppear {
listsModel.update()
}
.navigationTitle("ListsView.NavigationTitle")
这是因为 watchOS 总是默认添加系统 NavigationView