【问题标题】:Adding a TabView makes the Navigation Bar not cover the safe area in SwiftUI添加 TabView 使导航栏无法覆盖 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的支持。

标签: ios swift xcode swiftui


【解决方案1】:

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

TabView {
  ...
}
.edgesIgnoringSafeArea(.top)

【讨论】:

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