SwiftUI:TabView内嵌NavigationView时高度未占满全屏

3
我在我的SwiftUI项目中遇到了一个意外的界面问题,当我在TabView中添加NavigationView时。以下是我的代码:

struct MainView: View {
    @State private var selectedTab: Int = 0

    var body: some View {
        TabView(selection: $selectedTab) {
            NavigationView {
                ScrollView {
                    VStack {
                        ForEach(0..<30) { i in
                            Text("Hello World")
                                .padding()
                                .frame(minWidth: .zero, maxWidth: .infinity)
                        }
                    }
                }.background(Color.red)
                .navigationTitle("Home View")
            }.background(Color.green)
            .navigationViewStyle(StackNavigationViewStyle())
            .tabItem {
                TabItem(title: "Explore", systemImage: selectedTab == 0 ? "house.fill" : "house")
            }.tag(1)
            
            ExploreView()
                .background(Color.red)
                .tabItem {
                    TabItem(title: "Explore", systemImage: selectedTab == 1 ? "safari.fill" : "safari")
                }.tag(1)
        }
    }
}

这是我的场景代理代码:


struct RootView: View {
    var body: some View {
        MainView()
    }
}

class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo _: UISceneSession, options _: UIScene.ConnectionOptions) {
        if let windowScene = scene as? UIWindowScene {
            let window = UIWindow(windowScene: windowScene)
            self.window = window
        }

        let host = UIHostingController(rootView: RootView())
        window?.rootViewController = host
        window?.makeKeyAndVisible()
    }
}

NavigationView-TabView-ScrollView

ScrollView(位于NavigationView内部)的高度没有占据整个屏幕。 我尝试了所有的技巧(padding、frame、GeometryReader等),但都没有成功。 我不知道我在这里做错了什么,非常感谢任何帮助。


你能否添加更多信息和/或完善代码,使其自包含?我的快速测试(为非指定视图(如TabItem)创建基于文本的存根)按预期工作(底部没有间隙)。模拟器版本、设备或其他任何有助于他人观察问题的信息都将是有帮助的。 - Eric Shieh
1
我遇到了完全相同的问题。我正在现有项目中使用SwiftUI在UIKit中。我尝试了两个建议的答案,但都没有起作用:( - TiN
2个回答

3

感谢您的回答和提供帮助。

我不小心注释掉了 UITabBar 的外观逻辑,这个问题得到了解决。我不确定这是 SwiftUI 的一个 bug 还是我漏掉了什么东西。无论如何,注释掉下面的外观代码就修复了这个问题:

// UITabBar.appearance().isTranslucent = false   <<-- Remove this

我遇到了同样的问题。你发现是什么问题了吗? - Matias Contreras
但是如果您将其删除,则导航视图会延伸到选项卡栏后面...因此这不是一个解决方案。 - Hogdotmac

1

它在安全区内,你需要忽略它

}.background(Color.red)
.navigationTitle("Home View")
.ignoresSafeArea()             // << here !!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接