在导航 Link 为 Mac OS 选择 SwiftUI 之前,详细视图部分可见

Detail View partly visible before Navigation Link selected SwiftUI for Mac OS

我在 SwiftUI MacOS (Catalina) 中使用 NavigationView,由于某种原因,在实际选择 NavigationLink 之前,详细视图及其分隔线部分可见。理想情况下,我希望在选择列表中的某些内容之前隐藏详细信息视图。

我已经在所有视图上尝试了 minWidth 的各种组合,但无法正确查看:

这是我的主要观点:

var body: some View {
    VStack {
        NavigationView {
            List(networkManager.FileList!.items) { file in
                NavigationLink(destination: FileDetail(fileDetail: file)) {
                    FileRow(fileRow: file)
                }
            }
        }.frame(minHeight:300).background(Color.white)
    }
}

这是我的行视图:

var fileRow: Item
var body: some View {
     VStack(alignment: .leading) {
          HStack {
               Text(fileRow.name).font(Font.system(size: 12, weight: .regular, design: .default))
               Text(fileRow.path).font(Font.system(size: 12, weight: .regular, design: .default))
        }
    }
}

这是我的详细视图:

var fileDetail: Item
var body: some View {
     HStack {
          VStack {
               Text(fileDetail.name).font(.title)
               Text(fileDetail.created).font(Font.system(size: 12, weight: .regular, design: .default))
        }.background(Color.white).frame(minWidth:250, idealWidth:300, maxHeight: .infinity)
    }
}

编辑: 查看调试视图层次结构,看起来空视图是为 DetailView 创建的,view.width 为 10:

在 macOS NavigationView 上有 master/details 风格,所以即使没有提供细节,它也会添加一些隐含的内容。

这是可能的解决方案。

并非所有提供的依赖实体都在某些复制代码上进行了测试。 Xcode 11.4 / macOS 10.15.5.

var body: some View {
    VStack {
        NavigationView {
            List(items) { file in
                NavigationLink(destination: FileDetail(fileDetail: file)) {
                    FileRow(fileRow: file)
                }
            }

            // add explicit stub view for details pane 
            // on no selection with zero width
            Rectangle().frame(maxWidth: 0, maxHeight: .infinity) 

        }.frame(minHeight:300).background(Color.white)
    }
}