NavigationView嵌套层次结构中的空行

时间:2019-07-17 12:25:13

标签: navigation swiftui

我是SwiftUI的新手,正在尝试使用NavigationView和NavigationLink通过分层导航实现某种文件浏览器。即使技术上可行,在每个“更深”级别中,新条目上方也会显示空行。看起来,较高级别的条目保留了它们各自的行:它们不会显示在较深的级别中,而是保留为空白行,从而迫使新条目占据较低的行。

例如(参见所附屏幕截图):
文件夹“ A”和“ B”正确显示在第1和第2行中(在根目录下);选择文件夹“ A”后,子文件夹“ C”和“ D”出现在第3&4行,而第1&2行为空白。

Screenshot 1 Screenshot 2

ContentView.swift

import SwiftUI
struct ContentView : View {
    var body: some View {
        NavigationView {
            NavigationLink(destination: TreeView(item_id: 0, name: "Root")) {
                Text("Test")
            }
            .navigationBarTitle(Text("Select"))
        }       
    }
}

TreeView.swift

import SwiftUI

struct TreeView : View {
    var item_id: Int
    var name: String

    var body: some View {
        List(databaseData) { item in
            if item.parent == self.item_id {
                NavigationLink(destination: TreeView(item_id: item.id, name: item.name)) {
                    Text(item.name)
                }
            }
        }
        .navigationBarTitle(Text(self.name))
    }
}

有什么办法解决此问题吗?谢谢!

1 个答案:

答案 0 :(得分:0)

与此同时,我可以弄清楚:问题似乎是,如果if条件为false,则在列表闭包内添加一个空行。我通过过滤提供给列表的数组而不是过滤列表内部的方法来修复它:

    var body: some View {
    List(databaseData.filter{$0.parent == self.item_id}) { item in
        NavigationLink(destination: TreeView(item_id: item.id, name: item.name)) {
            Text(item.name)
        }
    }

在Xcode 11 beta 4中工作。