添加 TabView 使导航栏无法覆盖 SwiftUI 中的安全区域

Posted

技术标签:

【中文标题】添加 TabView 使导航栏无法覆盖 SwiftUI 中的安全区域【英文标题】:Adding a TabView makes the Navigation Bar not cover the safe area in SwiftUI 【发布时间】:2019-09-30 18:53:50 【问题描述】:

在我的 SwiftUI ios 应用中添加 TabView 时,导航栏停止覆盖缺口

我尝试为 TabView 实现创建另一个文件(修改 SceneDeletage 等)

这是一个没有 TabView 的简单代码,它使导航栏覆盖安全区域(也称为缺口)

import SwiftUI

struct ContentView: View 
    var body: some View 

        NavigationView
            ScrollView
                HStack
                    VStack
                        ForEach((1...10), id: \.self)_ in
                            Text("Hello")
                            .padding(.leading, 20)
                        
                    
                    Spacer()
                    //.padding(.leading, 20)
                
            
        .navigationBarTitle("Title Covers Safe Area")
        

    

struct ContentView_Previews: PreviewProvider 
    static var previews: some View 
        ContentView()
    

这是一个带有 TabView 的代码,它使导航栏不会覆盖安全区域

import SwiftUI

struct ContentView: View 
    var body: some View 

        TabView 
            NavigationView
                ScrollView
                    HStack
                        VStack
                            ForEach((1...10), id: \.self)_ in
                                Text("Hello")
                            
                        
                        Spacer()
                    
                    .padding(.leading, 20)
                
                .navigationBarTitle("Doesn't Cover Safe Area")
            
                .tabItem 
                    Image(systemName: "1.circle")
                    Text("First")
                .tag(0)
            HStack
                Spacer()
                VStack

                    Spacer()
                    Text("Second View")
                        .font(.system(size: 40))
                

            

                .tabItem 
                    Image(systemName: "2.circle")
                    Text("Second")
                .tag(1)
        

    



struct ContentView_Previews: PreviewProvider 
    static var previews: some View 
        ContentView()
    


【问题讨论】:

两张图说明情况imgur.com/a/ADh46Ek 嘿,我也遇到了同样的问题,你找到解决方法了吗? @KarenKarapetyan 是的,我做到了,我更新了 Xcode 并逐行重写了堆栈,它以某种方式工作 你好,今天我也注意到这个问题在更新xcode后得到修复,SwiftUI越来越好,感谢Erdal的支持。 【参考方案1】:

您可以使用方法edgesIgnoringSafeArea(_:)

TabView 
  ...

.edgesIgnoringSafeArea(.top)

【讨论】:

我会检查这个作为答案,但这种方法涉及 Xcode 11A420a 的其他横向问题 这对我不起作用,当我输入 .top 时没有任何反应swiftUI 中的错误或我做错了什么 @DivyanshuNegi 如果您已全局修改 NavigationBar 的外观,它将无法工作(例如 UINavigationBar.appearance().backgroundColor = .blue 即使在移除全局外观更改后它也不起作用。

以上是关于添加 TabView 使导航栏无法覆盖 SwiftUI 中的安全区域的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中使 NavigationBar 子视图可点击

在导航栏中插入图标​​/使 BarButtonItem 不可点击 Swift iOS

在导航控制器中添加子视图覆盖导航栏

Swift 3.0 向导航栏添加右键

使用 Swift 3 的导航栏背景颜色灯

如何使用 swift 在子视图中添加标签栏和导航栏?