【问题标题】:SwiftUI's NavigationView Is Missing The Back Button On Apple WatchSwiftUI 的 NavigationView 缺少 Apple Watch 上的后退按钮
【发布时间】:2021-01-31 07:15:32
【问题描述】:

我使用 SwiftIU 创建了一个 Apple Watch 应用。应用程序的主视图是一个列表,导航链接到另一个列表。当我在其中一个内部列表中时,后退按钮不在视图的顶部。 但是当我从屏幕侧面滑动时(就像在 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 模拟器中,有一个后退按钮,但在常规模拟器中,没有。 画布:

常规:

【问题讨论】:

    标签: swiftui watchos swiftui-navigationlink


    【解决方案1】:

    删除 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

    【讨论】:

    • 谢谢你!我正在努力寻找导航被破坏的原因,并从所有子视图中删除 NavigationView 完全修复它! :)
    • 删除导航视图以实际使导航视图正常工作......这太疯狂了
    • 那是天才……谁能想到。好问题,好答案,谢谢
    猜你喜欢
    • 2020-12-05
    • 1970-01-01
    • 2020-03-13
    • 1970-01-01
    • 2021-03-18
    • 2020-05-06
    • 1970-01-01
    • 2023-01-24
    • 2019-10-27
    相关资源
    最近更新 更多