SwiftUI中ContentUnavailableView的利用(iOS 17、tvOS 17推出的新组件) ...

打印 上一主题 下一主题

主题 775|帖子 775|积分 2325

iOS 17为SwiftUI带来了一个新的组件ContentUnavailableView,它答应我们向用户出现一个空状态,而不需要创建自定义错误大概无内容视图。
ContentUnavailableView易于利用,可自定义,并且具有效于空搜索状态的预定义视图。
发起在无法显示视图内容的情况下利用它,可以用于网络错误、没有项目的列表、没有返回结果的搜索和其他空状态。
利用ContentUnavailableView主要有两类:


  • 利用内置的Unavailable View。
  • 利用自定义的Unavailable View。
内置Unavailable View

ContentUnavailableView只支持一种内置场景:空搜索结果。我们可以利用ContentUnavailableView毫不费力地出现一个空的搜索结果视图。包罗放大镜图像,“无结果”标签以及获取有效搜索结果的有效说明。

比如上面的代码,直接调用ContentUnavailableView.search就显示除了右侧的视图,非常简单。
比如我们想显示搜索某某没有结果,就可以像下面这么用。

我们可以把上面的abc换成我们要搜做的内容。
另外还有一个好处是,ContentUnavailableView会主动翻译成应用步伐支持的语言。注意,它只会翻译成应用步伐支持的语言。不外笔者没有亲测过。
自定义ContentUnavailableView

ContentUnavailableView不仅用于搜索无结果的显示,也可以用于一些比如无网络,无数据等等的显示。
在初始化的时候我们可以自定义title, image, description等信息。比如下面的这些方法:

下面是一个无网络的提示:
  1. ContentUnavailableView(
  2.   "No Internet Connection",
  3.   systemImage: "wifi.slash",
  4.   description: Text("Please connect to the internet and try again")
  5. )
复制代码

除了提供title, image, description等参数,也可以是带闭包的参数。比如下面的初始化方法:
  1. init(
  2.     @ViewBuilder label: () -> Label,
  3.     @ViewBuilder description: () -> Description = { EmptyView() },
  4.     @ViewBuilder actions: () -> Actions = { EmptyView() }
  5. )
复制代码
我们可以在label和description闭包内完全自定义我们想要的东西,包罗样式等。
  1. ContentUnavailableView {
  2.   Text("No Mail")
  3.     .font(.largeTitle)
  4.     .foregroundColor(.black)
  5.   Text("No Mail")
  6.     .font(.largeTitle)
  7.     .foregroundColor(.red)
  8.   Image(systemName: "tray.fill")
  9. } description: {
  10.   Text("New mails you receive will appear here.")
  11. }
复制代码

在初始化的第一个label闭包内,我们添加了两个Text和一个Image,包罗设置了外观样式,这些都是支持的,而且这些添加的组件默认都是竖向分列的。
在label闭包和description闭包内恣意添加了一些组件,仅供测试了:

这个初始化方法中还有一个actions参数,答应用户交互一下。
  1. ContentUnavailableView {
  2.   Label("Empty Bookmarks", systemImage: "bookmark")
  3. } description: {
  4.   Text("Explore a great movie and bookmark the one you love to enjoy later.")
  5. } actions: {
  6.   Button("Browse Movies") {
  7.     // Go to the movie list.
  8.   }
  9.   .buttonStyle(.borderedProminent)
  10. }
复制代码

actions闭包支持添加多个Button的。
写在最后

虽然可以利用VStack和Text实现雷同的结果,但ContentUnavailableView为处理重复性任务节省了大量时间。此外,它还确保了跨不同平台的一致和吸引人的外观,究竟我们的App有可能是同时支持iOS,tvOS以及AppleWatch的。
最后,希望可以或许资助到有需要的朋友,假如您以为有资助,还望点个赞,添加个关注,笔者也会不停地积极,写出更多更好用的文章。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

兜兜零元

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表