我想知道当列表的数据源为空时,如何在列表中提供一个空的状态视图。下面是一个例子,我必须将其 Package 在if/else
语句中。有没有更好的替代方案,或者有没有一种方法可以在List
上创建一个修饰符,使之成为可能,即List.emptyView(Text("No data available..."))
。
import SwiftUI
struct EmptyListExample: View {
var objects: [Int]
var body: some View {
VStack {
if objects.isEmpty {
Text("Oops, loos like there's no data...")
} else {
List(objects, id: \.self) { obj in
Text("\(obj)")
}
}
}
}
}
struct EmptyListExample_Previews: PreviewProvider {
static var previews: some View {
EmptyListExample(objects: [])
}
}
字符串
7条答案
按热度按时间ycl3bljg1#
我很喜欢在
List
上附加一个overlay
,因为它是一个非常简单,灵活的修饰符:字符串
它的优点是很好地居中&如果你使用更大的占位符与图像等,他们将填补相同的区域作为列表。
thtygnil2#
其中一个解决方案是使用
@ViewBuilder
:字符串
nom7f22z3#
您可以创建一个自定义修饰符,在列表为空时替换占位符视图。如下使用:
字符串
这是修改器:
型
2skhul334#
我尝试了@pawello2222的方法,但是如果传递的对象的内容从空(0)变为非空(>0),或者相反,视图不会被重新渲染,但是如果对象的内容总是非空,它就可以工作。
下面是我一直以来的工作方法:
字符串
kuhbmx9i5#
你可以像这样使用
ViewModifier
来显示空视图。另外,使用View
扩展来方便使用。下面是演示代码,
字符串
示例(如何使用)
型
的数据
jtw3ybtb6#
在2021年,苹果没有提供
List
占位符。在我看来,创建一个 * 占位符 * 的最好方法之一是创建一个自定义的
ViewModifier
。字符串
通过扩展也可以稍微改进解决方案:
型
如果你对其他方式感兴趣,你可以阅读the article
cngwdvgl7#
对于iOS 17,您可以使用ContentUnavailable View:
字符串
如果你愿意,你可以添加一个foregroundStyle,所有的文本和图像都将有一个不同的颜色从相同的颜色:
型
如果你想添加一个动作,你可以做下面的代码:
型