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

Posted

技术标签:

【中文标题】SwiftUI中List数据源为空时如何在视图中心显示文本消息?【英文标题】:How to display a text message at the Center of the view when the List datasource is empty in SwiftUI? 【发布时间】:2020-03-28 06:15:11 【问题描述】:
struct LandmarkList: View 
    var body: some View 
        NavigationView 
            List(landmarkData)  landmark in
                LandmarkRow(landmark: landmark)
            
        
    

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

【问题讨论】:

【参考方案1】:
struct LandmarkList: View 
    var body: some View 
        NavigationView 
            if landmarkData.count == 0 
              VStack 
                Text("is empty")
               else 
              List(landmarkData)  landmark in
                 LandmarkRow(landmark: landmark)
              
           
        
    

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于SwiftUI中List数据源为空时如何在视图中心显示文本消息?的主要内容,如果未能解决你的问题,请参考以下文章

仅当搜索栏文本不为空时,如何运行过滤器功能?

当我的列表为空时,如何显示图像或文本?

文本字段为空时隐藏自动完成表格视图

ForEach 通过多个 TextField 来验证 SwiftUI 中是不是为空

SwiftUI:在列表中的两个视图之间画一条线/如何确定视图的中心位置?

当一个或多个变量为空时,如何将多个变量发送到 laravel 中的视图