如何在带有SwiftUI的.fullSizeContent窗口中拥有功能齐全的NavigationView

如何在带有SwiftUI的.fullSizeContent窗口中拥有功能齐全的NavigationView,swift,swiftui,macos-catalina,navigationview,arrow-keys,Swift,Swiftui,Macos Catalina,Navigationview,Arrow Keys,我正试图让我的导航视图填满整个窗口。列表应该从窗口的上边缘延伸到下边缘。但是,虽然在的样式掩码中添加了.fullSizeContentView后,列表一开始看起来是正确的,但只要我选择一个列表项,整个导航视图就会缩小 为了防止缩水,我找到了两个选择 将ZStack与Color-背景一起使用,这样背景将调整DetailView的大小 使用frame-修饰符,使maxWidth和maxHeight为.infinity 但这两个选项都会破坏列表的箭头键导航 使用NavigationView设置全尺寸内

我正试图让我的
导航视图
填满整个窗口。
列表
应该从窗口的上边缘延伸到下边缘。但是,虽然在
样式掩码
中添加了
.fullSizeContentView
后,列表一开始看起来是正确的,但只要我选择一个列表项,整个导航视图就会缩小

为了防止缩水,我找到了两个选择

  • ZStack
    Color
    -背景一起使用,这样背景将调整
    DetailView
    的大小
  • 使用
    frame
    -修饰符,使
    maxWidth
    maxHeight
    .infinity
  • 但这两个选项都会破坏
    列表的箭头键导航

    使用
    NavigationView
    设置全尺寸内容的正确方法是什么

    下面是复制问题所需的完整工作示例代码。如果您想测试它,只需在Catalina上的全新Swift macOS应用程序中替换这些文件的内容即可

    AppDelegate.swift
    导入可可粉
    导入快捷键
    @非应用程序主
    类AppDelegate:NSObject,NSApplicationDelegate{
    变量窗口:NSWindow!
    func ApplicationIDFinishLaunching(通知:通知){
    让contentView=contentView()
    window=NSWindow(
    contentRect:NSRect(x:0,y:0,宽度:480,高度:300),
    样式掩码:[.标题、.closable、.Minimable、.Resize、.fullSizeContentView],
    
    //据我所知,这里是一种方式(使用Xcode 12/macOS 10.15.6进行测试)。上面的
    WarneView
    没有任何更改


    谢谢你的回答。但是我猜这是在AppDeaveT.SWIFT中漏掉了.FulsisiZeCon视图。所以隐藏的标题栏是可见的。在缺少.FulsisiZeCeNeTunVIEW——不,。FulsisiZeCon视图> /代码>。如果你想隐藏标题栏是不同的问题,请考虑。我想这不是一个不同的问题,因为我问:
    我正在尝试让NavigationView填满整个窗口。列表应该从窗口的上边缘延伸到下边缘。
    我设置了
    .edgesIgnoringSafeArea(.all)
    正如您在通过链接看到的答案中建议的那样。只有我在ContentView.swift中设置了它,而不是在AppDelegate中。将其移到AppDelegate似乎对问题没有任何影响。无法使用箭头键导航列表。
    import Cocoa
    import SwiftUI
    
    @NSApplicationMain
    class AppDelegate: NSObject, NSApplicationDelegate {
        var window: NSWindow!
    
        func applicationDidFinishLaunching(_ aNotification: Notification) {
            let contentView = ContentView()
    
            window = NSWindow(
                contentRect: NSRect(x: 0, y: 0, width: 480, height: 300),
                styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
                // <---- remove .fullSizeContentView mask and layout will work without option 1 or 2 in ContentView
                backing: .buffered, defer: false)
            window.titlebarAppearsTransparent = true
            window.titleVisibility = .hidden
            window.isReleasedWhenClosed = false
            window.center()
            window.setFrameAutosaveName("Main Window")
            window.contentView = NSHostingView(rootView: contentView)
            window.makeKeyAndOrderFront(nil)
        }
    }
    
    import SwiftUI
    
    let warners = ["Yacko","Wacko","Dot"]
    
    struct WarnerView: View {
        var name: String
        var body: some View {
    //        ZStack { // <---- Option 1: use ZStack with Color.clear
    //            Color.clear
                VStack {
                    Text(name)
                    Text("Nothing to see here!")
                }
    //            .frame(minWidth: 100, idealWidth: 100, maxWidth: .infinity, minHeight: 100, idealHeight: 100, maxHeight: .infinity, alignment: .center)
    //          <---- Option 2: use only VStack with frame
    //        } // <- closing bracket for ZStack
        }
    }
    
    struct ContentView: View {
        var body: some View {
            ZStack {
                Color.clear
                NavigationView {
                    VStack(alignment: .leading) {
                        HStack {
                            Text("Warners")
                                .font(.headline)
                        }
                            .padding(16)
                        List(warners, id: \.self)
                         { warner in
                            NavigationLink(destination: WarnerView(name: warner)
                            ) {
                                Text(warner)
                            }
                        }.listStyle(SidebarListStyle())
                    }
                }
            }
            .edgesIgnoringSafeArea(.all)
            .frame(minWidth: 600, minHeight: 400)
        }
    }
    
    struct ContentView: View {
        var body: some View {
                NavigationView {
                    List {
                      HStack {
                            Text("Warners")
                                 .font(.headline)
                      }
                      ForEach(warners, id: \.self)
                        { warner in
                            NavigationLink(destination:
                                WarnerView(name: warner)
                                    .frame(maxWidth: .infinity, maxHeight: .infinity)
                                    ) {
                                 Text(warner)
                            }
                      }
                    }.listStyle(SidebarListStyle())
    
    // uncomment below for default details area
    //                  WarnerView(name: "")
    //                      .frame(maxWidth: .infinity, maxHeight: .infinity)
            }
        }
    }