【问题标题】:SwiftUI: NavigationView inside TabView height not occupying the fullscreenSwiftUI:TabView 内的 NavigationView 高度不占用全屏
【发布时间】:2021-09-04 03:42:26
【问题描述】:

当我在 TabView 中添加 NavigationView 时,我在 SwiftUI 项目中看到了一个意外的 UI 问题。

这是我的代码,


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()
    }
}

ScrollView(位于NavigationView 内)的高度没有占据整个屏幕。我尝试了所有技巧(填充,框架,GeometryReader,...),但没有运气。我无法弄清楚我在这里做错了什么,任何帮助将不胜感激。

【问题讨论】:

  • 您能否添加更多信息和/或完成代码以使其独立?我自己的快速测试(为非指定视图(如 TabItem)创建基于文本的存根)按预期工作(底部没有间隙)。模拟器版本、设备或任何其他帮助其他人观察问题的东西都会有所帮助。
  • 我遇到了这个确切的问题。我在 UIKit 中使用 SwiftUI(在现有项目中)。我尝试了两个建议的答案,但都不适合我:(

标签: ios swiftui swiftui-navigationview swiftui-tabview


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    感谢您的回答和帮助我。

    我不小心评论了UITabBar 的外观逻辑,其中解决了这个问题。我不确定这是 SwiftUI 中的错误还是我遗漏了一些东西。无论如何,评论这个以下外观解决了这个问题,

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

    【讨论】:

      猜你喜欢
      • 2022-07-23
      • 2017-11-30
      • 2016-05-11
      • 1970-01-01
      • 2019-08-05
      • 1970-01-01
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      相关资源
      最近更新 更多