当SwiftUI中的List数据源为空时,如何在视图中心显示文本消息


struct LandmarkList: View {
var body: some View {
NavigationView {
List(landmarkData) { landmark in
LandmarkRow(landmark: landmark)
}
}
}
}

当列表视图(表格视图(为空时,我想在视图的中心显示一条消息。在SwiftUI中实现这一点的最佳方式是什么。在"onAppear"中检查数据源计数并设置某种布尔值是正确的方法吗?

struct LandmarkList: View {
var body: some View {
NavigationView {
if landmarkData.count == 0 {
VStack {
Text("is empty")
} else {
List(landmarkData) { landmark in
LandmarkRow(landmark: landmark)
}
}
}
}
}

我只想尝试一个if-else语句。如果landmarkdata为nil或count=0,则显示文本。否则显示列表。

如果希望消息具有与列表项相同的行为,请使用ScrollViewGeometryReader

Group中嵌入条件状态,以便在任何情况下都显示NavigationView

不要忘记更改背景颜色并忽略安全区域,以便与列表更相似。

struct LandmarkList: View {
var body: some View {
NavigationView {
Group {
if landmarkData.isEmpty {
GeometryReader { geometry in
ScrollView {
Text("Your message!")
.multilineTextAlignment(.center)
.padding()
.position(x: geometry.size.width/2, y: geometry.size.height/2)
}
}
.background(Color(UIColor.systemGroupedBackground))
} else {
List(landmarkData) { landmark in
LandmarkRow(landmark: landmark)
}
}
}
.ignoresSafeArea()
.navigationTitle("Title")
}
}
}

您也可以使用@ViewBuilder在列表中提供一个空状态视图,如本答案中所建议的那样。

最新更新