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】:如果您希望您的消息具有与列表项相同的行为,请使用 ScrollView
和 GeometryReader
。
在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 中是不是为空