在Swiftui中添加标签栏时,取得了顶级空间

发布于 2025-01-27 16:25:40 字数 3129 浏览 5 评论 0原文

我正在我的 swiftui 应用中集成 side菜单侧菜单工作正常。我遇到的问题是我的底部有一个 tab bar ,当我打开 side菜单屏幕时,它从顶部占用了一些空间,而我不是得到为什么要获得该空间。这就是我得到的:

”

我打开调试视图层次结构时,它向我展示了:

“

这是我的主屏幕代码


struct HomeView: View {

@State var menuOpen: Bool = false

var body: some View {

Zstack {
  ZStack {
          HStack {
                                    
               if !self.menuOpen {
                           Button {
                                            
                               print("side menu tapped")
                               self.menuOpen.toggle()
                            } label: {
                                  Image("sideMenuButton")
                                      .resizable()
                                      .frame(width: 24, height: 24)
                                   }.padding()
                                }
                            Spacer()
                                  
                        }     
                     Text("Home")
                        .font(.custom(Poppins.semiBold.rawValue, size: 17))
                        .foregroundColor(Color(ColorName.appBlue.rawValue))
           }

       ZStack {
                SideMenu(width: 300,
                         isOpen: self.menuOpen,
                         menuClose: self.openMenu)
            }
       }     
      }.navigationBarHidden(true)
            .navigationBarBackButtonHidden(true)

     func openMenu() {
           self.menuOpen.toggle()
      }
}

当我使用没有选项卡栏时,这很好。没有标签栏,它看起来像这样:


struct TabBarControllerView: View {
    
    @State private var tabSelection = 0
    
    var body: some View {
        TabView(selection: $tabSelection) {
            
            HomeView()
                .tabItem {
                    Label("Home", image: tabSelection == 0 ? ImageName.home.rawValue : ImageName.silverHome.rawValue)
                }
                .tag(0)

          MyAccountView()
                .tabItem {
                    Label("Claims", image: tabSelection == 1 ? ImageName.claims.rawValue : ImageName.silverClaims.rawValue)
                }
                .tag(1)

     }.accentColor(Color(ColorName.appBlue.rawValue))

 }
}

struct TabBarControllerView_Previews: PreviewProvider {
    static var previews: some View {
        TabBarControllerView()
    }
}

​我尝试了 .ignoressafearea(),并且还给了填充 否定>负面,它 top top top top不是敲击,因为它已进入该空间之下。

我被困在这两天中,任何帮助将不胜感激。

I am integrating Side Menu in my SwiftUI app. The side menu is working fine. The problem I am getting is I have a tab bar at the bottom, and when I open my side menu screen, it is taking some space from the top and I am not getting why it is getting that space. This is what I am getting:

simulator

And when I open Debug View Hierarchy, it is showing me this:

Debug Hierarchy

This is my code for my home screen:


struct HomeView: View {

@State var menuOpen: Bool = false

var body: some View {

Zstack {
  ZStack {
          HStack {
                                    
               if !self.menuOpen {
                           Button {
                                            
                               print("side menu tapped")
                               self.menuOpen.toggle()
                            } label: {
                                  Image("sideMenuButton")
                                      .resizable()
                                      .frame(width: 24, height: 24)
                                   }.padding()
                                }
                            Spacer()
                                  
                        }     
                     Text("Home")
                        .font(.custom(Poppins.semiBold.rawValue, size: 17))
                        .foregroundColor(Color(ColorName.appBlue.rawValue))
           }

       ZStack {
                SideMenu(width: 300,
                         isOpen: self.menuOpen,
                         menuClose: self.openMenu)
            }
       }     
      }.navigationBarHidden(true)
            .navigationBarBackButtonHidden(true)

     func openMenu() {
           self.menuOpen.toggle()
      }
}

This is working fine when I use it without tab bar. Without tab bar it looks like this:

without tab bar

My code for tab bar controller is:


struct TabBarControllerView: View {
    
    @State private var tabSelection = 0
    
    var body: some View {
        TabView(selection: $tabSelection) {
            
            HomeView()
                .tabItem {
                    Label("Home", image: tabSelection == 0 ? ImageName.home.rawValue : ImageName.silverHome.rawValue)
                }
                .tag(0)

          MyAccountView()
                .tabItem {
                    Label("Claims", image: tabSelection == 1 ? ImageName.claims.rawValue : ImageName.silverClaims.rawValue)
                }
                .tag(1)

     }.accentColor(Color(ColorName.appBlue.rawValue))

 }
}

struct TabBarControllerView_Previews: PreviewProvider {
    static var previews: some View {
        TabBarControllerView()
    }
}

Does anyone knows why is it getting the top space? I tried .ignoresSafeArea() and also gave padding in negative, it went to top but the side menu did not tapping because it is getting under that space.

I am been stuck in this for 2 days, any help will be appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一个人的旅程 2025-02-03 16:25:40

TabView带有导航栏上方。通过添加.navigationbarhidden(true),可以通过一个简单的解决方案。

请参阅这篇文章: swiftui如何使用tabview 隐藏导航栏

注意:将来还提供了适当的最小代码来复制行为。您当前给出的代码依赖于其他组件,并且在一个新的项目中本身并不可以运行。

更新:
我创建了一个测试此标准的最低项目,并且此代码与我合作:

import SwiftUI

@main
struct testApp: App {
    var body: some Scene {
        WindowGroup {
            TabBarView()
        }
    }
}

struct TabBarView: View {
    @State private var tabSelection = 0
    var body: some View {
        TabView(selection: $tabSelection) {
            HomeView()
                .tabItem {
                    Label("Home", systemImage: "house")
                }
                .tag(0)
        }
    }
}

struct HomeView: View {
    var body: some View {
        ZStack {
            Rectangle().foregroundColor(.green)

            VStack {
                HStack {
                    Spacer()
                    Button {
                        print("side menu tapped")
                    } label: {
                        Image(systemName: "pencil")
                            .resizable()
                            .frame(width: 24, height: 24)
                    }.padding()
                    Spacer()
                }
                Spacer()
            }
        }
    }
}

”

鉴于此代码工作正常,而且问题不在这里,因此需要从OP中使用最低工作代码示例。

TabView comes with Navigation Bar up top. There is a simple solution by adding .navigationBarHidden(true).

See this post: SwiftUI how to hide navigation bar with TabView

Note: Also in the future give a proper minimum amount of code to reproduce the behavior. Your current code given relies on other components and isn't runnable by itself on a fresh project.

Update:
I created a minimum project to test this and this code works fine with me:

import SwiftUI

@main
struct testApp: App {
    var body: some Scene {
        WindowGroup {
            TabBarView()
        }
    }
}

struct TabBarView: View {
    @State private var tabSelection = 0
    var body: some View {
        TabView(selection: $tabSelection) {
            HomeView()
                .tabItem {
                    Label("Home", systemImage: "house")
                }
                .tag(0)
        }
    }
}

struct HomeView: View {
    var body: some View {
        ZStack {
            Rectangle().foregroundColor(.green)

            VStack {
                HStack {
                    Spacer()
                    Button {
                        print("side menu tapped")
                    } label: {
                        Image(systemName: "pencil")
                            .resizable()
                            .frame(width: 24, height: 24)
                    }.padding()
                    Spacer()
                }
                Spacer()
            }
        }
    }
}

Screenshot

Given that this code works fine and the issue is not here, minimum working code sample is needed from OP.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文