【问题标题】:Use NavigationLink programmatically in SwiftUI在 SwiftUI 中以编程方式使用 NavigationLink
【发布时间】:2020-01-13 08:15:57
【问题描述】:

如果满足某些条件,我正在寻找一种方法,以便在应用启动时从 NavigationView“一级”显示我的 WatchOS 应用程序中的视图。

我想要的效果就像我自己按下 NavigationLink 一样,即能够再次返回 NavigationView,如果我选择立即显示所需的视图,这是不可能的。

“navigationBarItems”也不适用于 WatchOS,这使得如果不首先实际单击 NavigationLink 就无法向后导航。

有没有办法以编程方式“单击” NavigationLink 以实现此目的?

【问题讨论】:

    标签: apple-watch swiftui watchos navigationlink


    【解决方案1】:

    我对 watchOS 没有任何经验,但我使用 NavigationLink 的 "isActive" variant 来满足类似的应用需求。

    在您的初始视图中,定义 @State var showOneLevelIn = false(或其他一些绑定)并将状态 var 设置为 true,如果您希望视图自动导航到您的第二级。 NavigationLink 的标签是 EmptyView(),因此它不会在您的初始视图中可见。

    NavigationLink(destination: OneLevelInView(), isActive: $showOneLevelIn, label: { EmptyView() })

    【讨论】:

    • 模拟器好像有bug。它只在第一次工作。在真实设备上它可以正常工作。
    • 可以加.disabled(true)关闭navigationLink点击,加.hidden()使导航箭头消失。
    • [iOS,不是 WatchOS] 我在尝试隐藏占用视图空间的 NavigationLink 时找到了这个答案。如果我将 NavigationLink 放在 ZStack 中,这样它就不会占用 View 上的空间,当 NavigationLink 顶部的其他东西有一个 tapGesture 时,NavigationLink 就会触发。 .hidden() 和 .disabled(true) 与 ZStack 完美结合。谢谢@laenhaall
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-11
    • 1970-01-01
    • 2021-06-12
    • 2021-12-15
    • 2021-02-26
    • 2022-11-27
    • 2020-07-02
    相关资源
    最近更新 更多