NavigationView 嵌套层次结构中的空行
NavigationView empty rows in nested hierarchies
我是 SwiftUI 的新手,我正在尝试使用 NavigationView 和 NavigationLink 实现某种具有分层导航的文件浏览器。尽管它在技术上是可行的,但在每个 "deeper" 级别中都会出现新条目上方的空行。看起来更高级别的条目保留了各自的行:它们没有显示在更深的级别而是留下一个空白行,迫使新条目占据较低的行。
例如(c.f。附加屏幕截图):
文件夹 "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))
}
}
有什么解决办法吗?谢谢!
同时我可以弄清楚:问题似乎是在列表闭包中,只要 if 条件为假,就会添加一个空行。我通过过滤提供给列表的数组而不是在列表内部过滤来修复它:
var body: some View {
List(databaseData.filter{[=10=].parent == self.item_id}) { item in
NavigationLink(destination: TreeView(item_id: item.id, name: item.name)) {
Text(item.name)
}
}
适用于 Xcode 11 beta 4。
我是 SwiftUI 的新手,我正在尝试使用 NavigationView 和 NavigationLink 实现某种具有分层导航的文件浏览器。尽管它在技术上是可行的,但在每个 "deeper" 级别中都会出现新条目上方的空行。看起来更高级别的条目保留了各自的行:它们没有显示在更深的级别而是留下一个空白行,迫使新条目占据较低的行。
例如(c.f。附加屏幕截图):
文件夹 "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))
}
}
有什么解决办法吗?谢谢!
同时我可以弄清楚:问题似乎是在列表闭包中,只要 if 条件为假,就会添加一个空行。我通过过滤提供给列表的数组而不是在列表内部过滤来修复它:
var body: some View {
List(databaseData.filter{[=10=].parent == self.item_id}) { item in
NavigationLink(destination: TreeView(item_id: item.id, name: item.name)) {
Text(item.name)
}
}
适用于 Xcode 11 beta 4。