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

How to display a text message at the Center of the view when the List datasource is empty in SwiftUI?

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

我想在列表视图(table 视图)为空时在视图中心显示一条消息。在 SwiftUI 中实现此目的的最佳方法是什么。检查 "onAppear" 中的数据源计数并设置某种 Bool 值是正确的方法吗?

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

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

如果您希望消息具有与列表项相同的行为,请使用 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 在列表中提供一个空状态视图,如 中所建议的那样。