在导航链接选择Mac OS的SwiftUI之前,局部视图部分可见

时间:2020-07-13 19:31:57

标签: macos swiftui swiftui-list swiftui-navigationlink

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

我已经在所有视图上尝试了minWidth的各种组合,但无法正确显示它: SwiftUI Navigation View Weirdness

这里是我的主视图:

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)
    }
}

编辑: 在“调试视图”层次结构中查看,似乎为view.width为10的DetailView创建了空视图: enter image description here

1 个答案:

答案 0 :(得分:1)

在macOS NavigationView上具有主/从样式,因此即使未提供任何细节,它也会添加一些隐式。

这是可能的解决方案。

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

demo

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)
    }
}