SwiftUI:导航栏不会填满 iPhone X 和更新设备上的屏幕顶部

Kev*_*ats 5 ios swift swiftui

我使用 SwiftUI 和导航视图创建了一个主从应用程序,但导航栏未正确显示在详细信息视图上。在 iPhone X 和更新的设备上,它不会填满屏幕的顶部(时间和状态图标所在的位置)。我使用主从模板在 Xcode 中创建了一个新项目,该应用程序渲染得很好。我已将我的应用程序与模板进行了比较,老实说我找不到任何不合适的地方,所以欢迎提出任何建议!

这是我的应用程序的屏幕截图。请注意,导航栏没有填满屏幕顶部:

我的应用程序无法正确呈现导航栏。

这是模板应用程序的屏幕截图,它按应有的方式显示栏:

模板应用程序,可以正确显示栏。

这是主视图的代码:

struct ListView: View {

@State var showNewAssignmentModal = false
@Environment(\.managedObjectContext) var context
@FetchRequest(entity: Assignment.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \Assignment.dueDate, ascending: true), NSSortDescriptor(keyPath: \Assignment.name, ascending: true)]) var assignments: FetchedResults<Assignment>

var body: some View {
    NavigationView {
        List(assignments, id: \.self) { assignment in
            AssignmentRow(assignment: assignment).environment(\.managedObjectContext, self.context)
        }

        .navigationBarTitle(Text("Lists"))
        .navigationBarItems(
            leading: EditButton(),
            trailing: Button(
                action: {
                    self.showNewAssignmentModal = true
            }
            ) {
                Image(systemName: "plus").imageScale(.large)

            } .sheet(isPresented: $showNewAssignmentModal) {
                NewAssignmentView().environment(\.managedObjectContext, self.context)
            }
        )

    }
}
}
Run Code Online (Sandbox Code Playgroud)

这是详细视图的代码:

struct AssignmentDetailView: View {

@Binding var assignment: Assignment
@Environment(\.managedObjectContext) var context

var body: some View {
    Text("Hello")
    .padding()
    .navigationBarTitle(Text(""), displayMode: .inline)

}
}
Run Code Online (Sandbox Code Playgroud)

Kyl*_*ard 3

您应该能够将此修改器添加到您的 NavigationView

.edgesIgnoringSafeArea(.top)

到它只会忽略顶部的地方。您也可以根据您需要的应​​用程序进行.bottom设置。.all希望这有效!

  • 成功了!我已经在主视图中尝试过,但人们认为视图本身被包装在选项卡视图中。我将 .edgesIgnoringSafeArea() 添加到选项卡视图中,解决了问题。 (3认同)