【问题标题】:Cannot use TabView on SwiftUI, WatchOS无法在 SwiftUI、WatchOS 上使用 TabView
【发布时间】:2019-09-21 02:26:32
【问题描述】:

有没有办法在 WatchOS 上使用 SwiftUI 来使用 TabView?

我看过大部分 WWDC 演讲,但他们没有提到 WatchOS。而且,在苹果documentation的SDK下没有枚举。

每当我尝试将其添加到 WatchOS 项目时,我都会收到以下错误:

'TabView' is unavailable in watchOS

或者有没有复制所需 TabView 的好方法?

我想要类似的东西: 只需水平滑动即可更改两个不同的页面。

【问题讨论】:

  • 您似乎找到了答案。 TabView 在手表上不可用。
  • 惊人的答案!
  • 为什么要在 WatchOS 中使用 TabView?
  • 我想创建一个类似于this的UI
  • 你可以自己写。它只是一个包含 3 个按钮的 HStack。每个按钮都包含一个 VStack,里面有一个 Image 和 Label

标签: swift xcode swiftui watchos-6


【解决方案1】:

如果您想要在您的应用程序中使用基于页面的导航(在视图控制器之间向左/向右滑动),您只需将另一个 WKHostingController 添加到项目的情节提要中。通过在它们之间创建一个 segue 来连接两个主机控制器。 segue 决定了你如何在控制器之间导航。

这个页面有一个很好的指南:https://www.techotopia.com/index.php/A_WatchKit_Page-based_Navigation_Tutorial

请记住,您想向情节提要添加另一个托管控制器,而不是其他任何东西。

我还没有找到在 SwiftUI 中以编程方式执行此操作的方法,这似乎是目前唯一的方法。

【讨论】:

  • 感谢您的资源。不过我有几个问题。 [1] 当我添加新的 WKHostingController 时,我必须为其分配一个新的 HostingController2.swift 文件,并在该文件内部分配一个新视图,该视图将被初始化为该 WKHostingController。这意味着主入口点控制器有自己的主机控制器,然后有自己的视图(内容视图)。第二个WKHostingController 也是如此。问题是我正在使用一个 Observable 对象作为我的“事实来源”。如何在 Content()Content2() 中使用相同的 Observable 对象(EnvironmentObject)?
  • [2] 问题是最初我想从一个视图开始。然后让我们说单击一个按钮,现在有 3 个WKHostingController,有什么可能的方法吗?
  • 我能够解决第一个问题,实现类似this。我遇到了第二个问题我有 3 个托管控制器(HC1、HC2、HC3)HC1 是初始控制器,它有一个 NavigationLink 到 HC2 使用 NavigationLink(destinationName: "HC2")storyboard 我有那个 HC2 有“与 HC3 的“下一页”关系”(segue)问题是 NavLink 确实将我们带到了 HC2,但从那里我无法到达 HC3。这意味着我看不到该点并且无法滑动到下一页(HC3)。对正在发生的事情有任何想法吗?
  • 如果您使用 WKHostingController 的 .presentController(withNameAndContexts:)reloadRootControllers(withNamesAndContexts:),您可以加载一个新的 WKHostingController 集,该集将显示为页面
【解决方案2】:

现在从 watchOS 7 开始提供:https://developer.apple.com/documentation/swiftui/tabview

【讨论】:

    猜你喜欢
    • 2021-12-08
    • 1970-01-01
    • 2020-07-26
    • 2020-01-06
    • 1970-01-01
    • 2019-12-26
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多