如何在 SwiftUI 中隐藏 TabBar 并保留工具栏项?
Posted
技术标签:
【中文标题】如何在 SwiftUI 中隐藏 TabBar 并保留工具栏项?【英文标题】:How can you hide a TabBar in SwiftUI and retain toolbarItems? 【发布时间】:2021-04-01 16:04:12 【问题描述】:当从一个视图推送到另一个视图时,我想在 SwiftUI 中隐藏我的 TabView 的 TabBar,就像在消息以外的几乎所有聊天应用程序中一样。
我已经看到了几种使用第三方库的方法,但是我正在寻找一个本地解决方案。
我最接近的是嵌套在 NavigationView 中的 TabView。这似乎工作正常,并且可以设置 NavigationTitle 但是我还没有找到设置工具栏项的方法。
@State var navTitle: String = ""
NavigationView
TabView
ViewA()
.tabItem
Label("TabA", systemImage: "some.image")
ViewB()
.tabItem
Label("TabB", systemImage: "some.image")
ViewC()
.tabItem
Label("TabC", systemImage: "some.image")
.navigationTitle($navTitle) // change nav title in tabbed views
如果我要使用这种方法来确保在 ViewA/B/C 中推送新视图时 tabBar 隐藏,我将如何将 toolBarItems 放置在 ViewA/B/C 的导航栏中的 navigationBarTrailing 中?
我需要这些 toolBarItems 中的按钮可以在 ViewA/B/C 中访问,否则我将在 TabBarView 中创建 viewModels 并传递我想要避免的。
如果只有一种方法可以在推送到另一个视图时隐藏 TabBar,我可以返回将 navigationView 嵌套在 TabView 中,这会使事情变得更容易。
【问题讨论】:
【参考方案1】:我所做的是一个非常老套的解决方案,但它似乎可以工作,直到他们有办法隐藏 TabBar:
NavigationView
TabView
ViewA()
.tabItem
Label("TabA", systemImage: "some.image")
ViewB()
.tabItem
Label("TabB", systemImage: "some.image")
ViewC()
.tabItem
Label("TabC", systemImage: "some.image")
.navigationBarHidden(true)
然后您可以在每个视图中添加一个 NavigationView。似乎运作良好,但显然不是理想的方法。
【讨论】:
虽然 Swift(现在)是开源的,但不幸的是 SwiftUI 不是。我明白为什么,但仍然。 Swift,目前是 5.3.3,自 WWDC 2020 以来已经更新了 5 次。SwiftUI?我什至不确定 Apple 是否使用版本控制,但假设它是 2.x?我的看法,祝你好运,WWDC 2021 将推出一些不那么俗气的东西。 (我仍然使用 UIKit 仅仅是因为我不关心 Apple Watch 或 Mac 硬件,而且我的应用程序有很多“差距”。)以上是关于如何在 SwiftUI 中隐藏 TabBar 并保留工具栏项?的主要内容,如果未能解决你的问题,请参考以下文章