我是SwiftUI的新手,正在尝试使用NavigationView和NavigationLink通过分层导航实现某种文件浏览器。即使技术上可行,在每个“更深”级别中,新条目上方也会显示空行。看起来,较高级别的条目保留了它们各自的行:它们不会显示在较深的级别中,而是保留为空白行,从而迫使新条目占据较低的行。
例如(参见所附屏幕截图):
文件夹“ A”和“ B”正确显示在第1和第2行中(在根目录下);选择文件夹“ A”后,子文件夹“ C”和“ D”出现在第3&4行,而第1&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))
}
}
有什么办法解决此问题吗?谢谢!
答案 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中工作。