在SwiftUI中使用几何体读取器单击卡片时隐藏选项卡栏

在SwiftUI中使用几何体读取器单击卡片时隐藏选项卡栏,swiftui,geometryreader,Swiftui,Geometryreader,我正在使用一个自定义选项卡栏,并实现了当您在“今日视图”中单击一张卡时,您可以在iOS应用商店中找到的相同动画 一旦一张卡片被展开,我想隐藏标签栏。目前我正在用布尔变量隐藏它。但是当我点击其中一张卡片时,整个几何读取器都会关闭 这是一个包含选项卡栏和HomeView的类,其中实现了带有卡片的列表 struct AppCoordinator: View { @State var index = 0 @State var showTabbar = true var

我正在使用一个自定义选项卡栏,并实现了当您在“今日视图”中单击一张卡时,您可以在iOS应用商店中找到的相同动画

一旦一张卡片被展开,我想隐藏标签栏。目前我正在用布尔变量隐藏它。但是当我点击其中一张卡片时,整个几何读取器都会关闭

这是一个包含选项卡栏和HomeView的类,其中实现了带有卡片的列表


struct AppCoordinator: View {
    @State var index = 0
    @State var showTabbar = true
    
    var body: some View {
        ZStack(alignment: .bottom) {
            if self.index == 0 {
                HomeView(showTabbar: self.$showTabbar)
                    .padding(.bottom, -10)
            } else if self.index == 1 {
                Text("Order View")
            } else if self.index == 2 {
                Text("Settings View")
            }
            CustomTabBar(index: self.$index)
                .isHidden(!showTabbar)
        }.edgesIgnoringSafeArea(.bottom)
    }
}

这是HomeView,几何体读取器所在的位置


struct HomeView: View {
    @ObservedObject var model = HomeViewModel()
    @State var index = 0
    @State var hero = false
    @Binding var showTabbar: Bool
    
    var body: some View {
        ZStack(alignment: .bottom) {
            VStack{
                ScrollView(.vertical, showsIndicators: false) {
                    HomeTopMenue(index: $index)
                        .padding()
                    VStack(alignment: .center, spacing: 30) {
                        ForEach(0..<self.model.meals.count, id: \.self){i in
                            GeometryReader{g in
                                CardView(meal: self.$model.meals[i], hero: self.$hero)
                                    .offset(y: self.model.meals[i].getExpanded() ? -g.frame(in: .global).minY : 0)
                                    .opacity(self.hero ? (self.model.meals[i].getExpanded() ? 1 : 0) : 1)
                                    .onTapGesture {
                                        self.showTabbar.toggle()
                                        withAnimation(.interactiveSpring(response: 0.5, dampingFraction: 0.8, blendDuration: 0)){
                                            if !self.model.meals[i].getExpanded() {
                                                self.hero.toggle()
                                                if self.model.meals[i].expanded == nil {
                                                    self.model.meals[i].expanded = true
                                                } else {
                                                    self.model.meals[i].expanded?.toggle()
                                                }
                                            }
                                        }
                                }
                            }.frame(height: self.model.meals[i].getExpanded() ? UIScreen.main.bounds.height : 400)
                        }
                    }
                }.statusBar(hidden: hero)
            }
        }
    }
}


结构HomeView:视图{
@ObservedObject变量模型=HomeViewModel()
@状态变量指数=0
@State var hero=false
@绑定变量showtabar:Bool
var body:一些观点{
ZStack(对齐:。底部){
VStack{
滚动视图(.vertical,showsIndicators:false){
HomeTopMenue(索引:$index)
.padding()
VStack(对齐:。中心,间距:30){
ForEach(0。。