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

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

当列表视图(表格视图)为空时,我想在视图中心显示一条消息。在SwiftUI中,最好的方法是什么?在“onAppear”中检查数据源计数并设置某种布尔值是否正确?

3个回答

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

0
我会尝试使用if else语句。如果landmarkdata为空或计数为0,则显示文本。否则显示列表。

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在列表中提供一个空状态视图,正如答案所建议的那样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接