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