如何使用 SwiftUI 消除嵌套 NavigationView 中的空间

dev*_*max 7 xcode swiftui ios-navigationview

我目前正在开发一个使用 SwiftUI 的 iOS 项目。我有 3 个页面(MainMenu、CalendarList 和 DateDetails。)

在第二页(CalenderList)上,屏幕顶部和实际的 NavigationBarTitle 之间有一个空白区域。

第二页的图像 - 日历列表

在第三页上,您可以看到后退按钮(返回主菜单),并且顶部有两个空白区域。

第 3 页的图片 - 日期详细信息

我见过人们使用 .navigationBarHidden 来解决这个问题,但我无法以解决问题的方式实现它。

我是否错误地使用了 NavigationView() ?或者有什么特殊的技巧吗?

这是主菜单的代码:

import SwiftUI

struct MainMenu: View {
    var body: some View {
        NavigationView {
            VStack {
                Text("Calendar")
                    .font(.largeTitle)
                    .fontWeight(.heavy)
                    .foregroundColor(Color(red: 0.055, green: 0.173, blue: 0.322))
                    .padding(.top, 55.0)
                Text("Main Menu")
                    .font(.headline)
                    .foregroundColor(Color(red: 0.635, green: 0.635, blue: 0.635, opacity: 1.0))
                
                /*Image("Logo")
                    .resizable()
                    .frame(width: 150.0, height: 150.0)*/

                Spacer()
                
                HStack {
                    NavigationLink(destination: CalendarList()) {
                        Image(systemName: "calendar")
                            .resizable()
                            .frame(width: 75.0, height: 75.0)
                            .padding()
                            
                            
                    }
                    
                    NavigationLink(destination: CalendarList()) {
                        Image(systemName: "gear")
                            .resizable()
                            .frame(width: 75.0, height: 75.0)
                            .padding()
                    }
                    
                }
                
                
                
                HStack {
                    NavigationLink(destination: StudentInfo()) {
                        Image(systemName: "info.circle")
                            .resizable()
                            .frame(width: 75.0, height: 75.0)
                            .padding()
                    }
                    
                    NavigationLink(destination: CalendarList()) {
                        Image(systemName: "exclamationmark.circle")
                            .resizable()
                            .frame(width: 75.0, height: 75.0)
                            .padding()
                    }
                }
                
                Spacer()
            }
        }
        
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是 CalendarList 的代码(第 2 页):

import SwiftUI

struct CalendarList: View {
    var body: some View {
        NavigationView {
            List(calendarData, id: \.date) { Calendar in
                
                if Calendar.collab {
                    NavigationLink(destination: DateDetails(calendar: Calendar)) {
                        CalendarRow(calendar: Calendar)
                    }
                } else {
                CalendarRow(calendar: Calendar)
                }
            }
            .navigationBarTitle(Text("Schedule"))
        }
        
    }
}
Run Code Online (Sandbox Code Playgroud)

这是 DateDetails 的代码(第 3 页):

import SwiftUI

struct DateDetails: View {
    var calendar: Calendar
    
    var body: some View {
        NavigationView {
            VStack (alignment: .center) {
                //Image("Logo")
                
                    
                HStack {
                    Text(calendar.month.prefix(4) + ".")
                        .font(.largeTitle)
                    Text(String(calendar.date).suffix(1))
                        .font(.largeTitle)
                    
                    Spacer()
                }
                
                HStack {
                    Text(calendar.schedule)
                        .font(.title)
                    Spacer()
                }
                
                Spacer()
                    .frame(height: 30.0)
                
                Text(calendar.info)
                    .font(.body)
                
                Spacer()
            }
            .navigationBarTitle(String(calendar.date).prefix(4).suffix(2) + "/" + String(calendar.date).suffix(2))
                
            .padding()
        }
        
    }
}
Run Code Online (Sandbox Code Playgroud)

Lua*_*lan 10

仅在顶层使用 NavigationView,您不需要将其添加到每个子屏幕中,只需将其从 CalendarList 和 DateDetails 中删除即可,它将解决您的间距问题

  • 当您导航到选项卡视图时,这如何应用?选项卡中似乎没有显示标题。 (2认同)