swiftui - TabView 干扰启动屏幕标题高度

标签 swiftui ios15

我在导航 View 中有一个选项卡 View 。启动时,ContentView() 设置选项卡 View ,然后设置 StartUpView()。

当 StartUpView() 被单独调用时,它包含 View 顶部的蓝色保留 block 以及下面的一个小块,其中包含两个按钮(一个用于菜单,一个用于下面的 future 逻辑的保存按钮)。

当我从 ContentView() 运行 StartupView() 时,蓝色 block 的大小 (33 毫米) 是 StartupView() 直接调用自身时的大小 (15 毫米) 的两倍多。

在 StartUpView() 中,我必须将 GeometryReader 百分比从 60% 增加到 80% 才能显示这两个按钮。有什么办法可以保持蓝色 block 原来的高度吗?

我的目标--这是单独运行 StartupView() 时的 View /image/8kCvM.png

这就是从选项卡 View 逻辑调用时 StartupView() 的样子。 /image/bve7p.png

struct ContentView: View {
    @State private var selectedTab: Tabs = .home

    var body: some View {

        NavigationView {
            TabView (selection: $selectedTab) {
                StartUpView()
                    .tabItem {
                        Label("Tab A", systemImage: "a.circle.fill")
                    }.tag(Tabs.taba)

                TabBView()
                    .tabItem {
                        Label("Tab B", systemImage: "b.circle.fill")
                    }.tag(Tabs.tabb)

                TabCView()
                    .tabItem {
                        Label("Tab C", systemImage: "c.circle.fill")
                    }.tag(Tabs.tabc)

                TabDView()
                    .tabItem {
                        Label("Tab D", systemImage: "d.circle.fill")
                    }.tag(Tabs.tabd)

                TabEView()
                    .tabItem {
                        Label("Tab E", systemImage: "e.circle.fill")
                    }.tag(Tabs.tabe)
            }
        }.navigationViewStyle(StackNavigationViewStyle())
    }
}


 struct StartupView: View {
 
    var body: some View {

        NavigationView {
            GeometryReader { g in
                ZStack (alignment: .top) {
                    Color.blue
                        .frame(height: (g.safeAreaInsets.top) * 0.6, alignment: .top)
                        .ignoresSafeArea()

                        .navigationTitle("Title")

                        .toolbar {
                            ToolbarItem(placement: .navigationBarLeading) {
                                NavigationLink (destination: SettingsView()) {
                                    Image(systemName: "line.3.horizontal")
                                        .resizable()
                                        .foregroundColor(.white)
                                        .frame(width: 16, height: 16)
                                }
                            }

                            ToolbarItem(placement: .navigationBarTrailing) {
                                Button(action: {
                                    print("save tapped!")
                                }){
                                    Text("Save")
                                        .foregroundColor(.white)

                                }
                            }
                        }
                } 
            } 
        }
    }
}

最佳答案

您不需要在 StartUpView 中使用第二个 NavigationView - 层次结构中应该只有一个。这个问题是由于第二个导航 View 导航栏造成的。

所以固定部分是

 struct StartUpView: View {

    var body: some View {
//        NavigationView {          // << removed !!
        GeometryReader { g in
           // ... other code
        }
    }
}

使用 Xcode 13.4/iOS 15.5 进行测试

关于swiftui - TabView 干扰启动屏幕标题高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72722392/

相关文章:

ios - SwiftUI 中的错误消息 : Type '() -> ()' cannot conform to 'ShapeStyle'

SwiftUI displayModeButtonItem 内部管理

ios - HStack 中的两个按钮相互采取行动

swift - 如何在 iOS 15 上使用 UIWindowScene.windows?

ios - SwiftUI:VStack 中的 VStack,标签被截断

SwiftUI - 如何使用按钮然后使用计时器使文本显示

csv - 通过 CSV 文件导出数据

swift - iOS 15 中的文档浏览器应用不断创建 iCloud 驱动器文件夹

ios - Xcode 12 和 iOS 15

ios - 如何以编程方式检查用户是否为 iOS 应用程序启用了计划摘要通知?