【问题标题】:Is page-based navigation possible in a SwiftUI app on WatchOS?WatchOS 上的 SwiftUI 应用程序中是否可以进行基于页面的导航?
【发布时间】:2020-01-12 19:00:37
【问题描述】:

我看到 WatchOS 的基于页面的导航是 supported,但有没有办法使用 SwiftUI 访问此功能?

【问题讨论】:

标签: swift swiftui watchos


【解决方案1】:

如果您正在使用新的 SwiftUI App Lifecycle 并且无法访问 Storyboards(或者只需要 App Delegate Cycle 的解决方案而不使用 Storyboards),您可以在 SwiftUI 2 中使用新的 Page View 样式:

WindowGroup {
   TabView {
     Page1View()
     Page2View()
   }
   .tabViewStyle(PageTabViewStyle())
}

【讨论】:

  • 是的 TabView 做到了,WatchOS 7 的新功能。这让我最终可以完全删除故事板。谢谢!
  • 是否允许超过 10 页?
  • @alamodey 似乎有 10 个项目的限制。我无法添加更多。但是对于基于主页的导航,您不会想要超过 10 个选项卡吗? :)
  • @SharathSriram 我使用这个 UI 元素创建了一系列使用我的 Watch 应用程序的提示,所以我有超过 10 个,但现在将其减少到 10 个。
【解决方案2】:

是的,这是可能的。首先,像这样为每个页面定义托管控制器

class Page1HostingController: WKHostingController<Page1View> {
    override var body: Page1View {
        self.setTitle("page1")
        return Page1View()
    }
}

class Page2HostingController: WKHostingController<Page2View> {
    override var body: Page2View {
        self.setTitle("page2")
        return Page2View()
    }
}

Page1ViewPage2View 是您的 SwiftUI 实现。

然后,将新的视图控制器添加到您的Interface.storyboard,将它们的实现类设置为您的新控制器类并通过“下一页”segue 连接它们。

【讨论】:

  • 成功了,谢谢!我认为 SwiftUI 应该取消故事板。
【解决方案3】:

NavigationLink 按钮,按下时会触发导航演示。

var body: some View {
    VStack() {
        NavigationLink(destination: Text("Destination view"), label: {
        Text("Title of the NavigationLink button")
      })
    }
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 2022-06-29
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多