在SwiftUI中隐藏选项卡视图或创建条件选项卡视图
我的应用程序有三个选项卡:读取、发现、配置文件。在从“读取”视图导航到的一个特定视图中,我想隐藏选项卡视图并显示一个自定义工具栏/选项卡栏,该工具栏/选项卡栏将显示操作按钮,例如“保存”,如 我已经在谷歌上搜索了2天的堆栈溢出,但没有运气。这就是我所看到/尝试的: 隐藏选项卡视图:似乎这在SwiftUI中根本不可能实现。此网站上发布了一些攻击,但它们对我不起作用,例如,尝试使用UITabBarController修改或过于妥协,例如,在导航视图中包装选项卡视图,导致选项卡视图在所有子视图中消失 使用根页面:这可以工作,但导航视图断开后无法返回按钮 条件选项卡视图:我没有在任何地方看到这篇文章,但尝试了一下。我在选项卡视图中尝试了一个带有bool状态变量的if语句,其中主选项卡Read、Discover、Profile设置为默认值,并且在特定的子视图页面上,使用了不同的选项卡视图,例如,带有保存按钮。但这似乎也不起作用。在SwiftUI中隐藏选项卡视图或创建条件选项卡视图,swiftui,tabview,Swiftui,Tabview,我的应用程序有三个选项卡:读取、发现、配置文件。在从“读取”视图导航到的一个特定视图中,我想隐藏选项卡视图并显示一个自定义工具栏/选项卡栏,该工具栏/选项卡栏将显示操作按钮,例如“保存”,如 我已经在谷歌上搜索了2天的堆栈溢出,但没有运气。这就是我所看到/尝试的: 隐藏选项卡视图:似乎这在SwiftUI中根本不可能实现。此网站上发布了一些攻击,但它们对我不起作用,例如,尝试使用UITabBarController修改或过于妥协,例如,在导航视图中包装选项卡视图,导致选项卡视图在所有子视图中消失
有人有工作代码的想法或示例吗?谢谢 您可以将新视图显示为图纸,这样您提到的特定视图就可以有自己的选项卡视图
我在下面的代码中实现了两个解决方案: 随时随地更新标签 转到选项卡上的特定视图
请阅读和考虑和感谢,虽然一些具体的反馈将被赞赏的问题是如何改善,因为这是我第一次张贴。如果是因为我没有包含代码,那么指南很清楚,代码不是必需的。还是呢?考虑一个感谢的解决方案吧!这很清楚-我将很快添加可复制的代码。谢谢!如果没有其他办法,那绝对是一个选择。我希望用户在视图中花费相当多的时间,因此,不幸的是,模态方法在该上下文中感觉不正确-感觉更像是一个快速弹出窗口。没问题!你能详细解释一下你想要实现的用户体验吗?我也给了一个新的答案,请看一看。谢谢!这非常有效,并为隐藏或更新选项卡提供了灵活性。谢谢
struct ContentView: View {
@State var presentView = false
var body: some View {
Button(action: {
self.presentView.toggle()
}) {
Text("Present View")
}
.sheet(isPresented: $presentView) {
TabView {
// content
}
}
}
}
enum MyTab: String {
case a, b, c, d
var view: AnyView {
switch self {
case .a, .b: return AnyView(ChildView(page: rawValue))
case .c, .d: return AnyView(SpecificView())
}
}
}
class ViewModel: ObservableObject {
@Published var tabs: [MyTab] = [.a, .b]
@Published var selectedTab: MyTab = .a
@Published var shouldShowTab = true
var customBinding: Binding<MyTab> {
Binding(get: {
self.selectedTab
}, set: {
if $0 == .c {
// save
} else if $0 == .d {
// like
}
self.selectedTab = $0
})
}
func updateTabs() {
tabs = [.c, .d]
}
}
struct ContentView: View {
@EnvironmentObject var viewModel: ViewModel
var body: some View {
Group {
if viewModel.shouldShowTab {
TabView(selection: viewModel.customBinding) {
ForEach(viewModel.tabs, id: \.self) { tab in
tab.view
.tabItem { Text(tab.rawValue) }
}
}
} else {
SpecificView()
}
}
}
}
struct ChildView: View {
@EnvironmentObject var viewModel: ViewModel
var page: String
var body: some View {
VStack(spacing: 24) {
Text("Page: \(page)")
Button(action: {
self.viewModel.shouldShowTab = false
}) {
Text("Go to Specific View")
}
Button(action: {
self.viewModel.updateTabs()
}) {
Text("or update tabs on the go")
}
}
}
}
struct SpecificView: View {
@EnvironmentObject var viewModel: ViewModel
var body: some View {
// Use whatever you'd like tab etc.
VStack(spacing: 24) {
Text("My Specific View")
Button(action: {
self.viewModel.shouldShowTab = true
}) {
Text("Go back to Tab View")
}
}
}
}