gpt4 book ai didi

ios - 使用 NavigationLink 打开新 View 时如何隐藏 TabView?

转载 作者:行者123 更新时间:2023-12-04 17:24:18 35 4
gpt4 key购买 nike

假设我们有一个 SwiftUI View 包含

struct ContentView: View {
var body: some View {
TabView {
FirstView().tabItem {
// tabItem image and text
}
SecondView().tabItem {
// tabItem image and text
}
}
}
}

现在,假设 FirstView 包含一个带有可滚动内容的 NavigationView,每个元素都使用 NavigationLink。我怎样才能让它在触发 NavigationLink 目的地时(即打开 subview ),它接管整个页面(全屏),从而隐藏 TabView ?

理想情况下,我希望支持 iOS 13+。

我已尝试按照 Hacking with Swift 上的指导进行操作但无济于事。

我也遵循了 SwiftUI Hide TabView bar inside NavigationLink views 中的建议但发现顶级解决方案的性能不是很好,所以我希望实现一个没有延迟出现的解决方案。

最佳答案

tabitem 的内容包含在检查共享状态的 if 条件中:

struct ContentView: View {

@StateObject private var state = State()

var body: some View {
TabView {
FirstView().tabItem {
if !state.hideTabView {
// tabItem image and text
}
}
SecondView().tabItem {
if !state.hideTabView {
// tabItem image and text
}
}
}
.environmentObject(state)
}
}

State 是一个 ObservableObject:

class State: ObservableObject {
@Published hideTabView: Bool = false
}

然后您可以在通过 NavigationLink 链接到的 View 上使用 onAppear(例如在 FirstView 中):

struct FirstView: View {

@EnvironmentObject private var state: State
var body: some View {
VStack {
// ... some content
}
.onAppear(perform: { state.hideTabView = true })
.onDisappear(perform: { state.hideTabView = false })
}
}

当您按下“< Back”时,TabView 会稍有延迟,如果这真的困扰您,那么您可以制作一个自定义的 Back 按钮并将此 state.hideTabView = false 移动到点击该按钮的事件。

这是我能想到的一种方法 :) 此外,您可能会发现 this thread有帮助。

关于ios - 使用 NavigationLink 打开新 View 时如何隐藏 TabView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64414483/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com