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

iOS 17SwiftUI带来了一个新的组件ContentUnavailableView,它允许我们向用户呈现一个空状态,而不需要创建自定义错误或者无内容视图。

ContentUnavailableView易于使用,可自定义,并且具有用于空搜索状态的预定义视图。

建议在无法显示视图内容的情况下使用它,可以用于网络错误、没有项目的列表、没有返回结果的搜索和其他空状态。

使用ContentUnavailableView主要有两类:

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

内置Unavailable View

ContentUnavailableView只支持一种内置场景:空搜索结果。我们可以使用ContentUnavailableView毫不费力地呈现一个空的搜索结果视图。包括放大镜图像,“无结果”标签以及获取有效搜索结果的有用说明。
在这里插入图片描述
比如上面的代码,直接调用ContentUnavailableView.search就显示除了右侧的视图,非常简单。
比如我们想显示搜索某某没有结果,就可以像下面这么用。
在这里插入图片描述
我们可以把上面的abc换成我们要搜做的内容。
另外还有一个好处是,ContentUnavailableView会自动翻译成应用程序支持的语言。注意,它只会翻译成应用程序支持的语言。不过笔者没有亲测过。

自定义ContentUnavailableView

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

ContentUnavailableView("No Internet Connection",systemImage: "wifi.slash",description: Text("Please connect to the internet and try again")
)

在这里插入图片描述
除了提供title, image, description等参数,也可以是带闭包的参数。比如下面的初始化方法:

init(@ViewBuilder label: () -> Label,@ViewBuilder description: () -> Description = { EmptyView() },@ViewBuilder actions: () -> Actions = { EmptyView() }
)

我们可以在labeldescription闭包内完全自定义我们想要的东西,包括样式等。

ContentUnavailableView {Text("No Mail").font(.largeTitle).foregroundColor(.black)Text("No Mail").font(.largeTitle).foregroundColor(.red)Image(systemName: "tray.fill")} description: {Text("New mails you receive will appear here.")
}

在这里插入图片描述
在初始化的第一个label闭包内,我们添加了两个Text和一个Image,包括设置了外观样式,这些都是支持的,而且这些添加的组件默认都是竖向排列的。

label闭包和description闭包内随便添加了一些组件,仅供测试了:
在这里插入图片描述
这个初始化方法中还有一个actions参数,允许用户交互一下。

ContentUnavailableView {Label("Empty Bookmarks", systemImage: "bookmark")
} description: {Text("Explore a great movie and bookmark the one you love to enjoy later.")
} actions: {Button("Browse Movies") {// Go to the movie list.}.buttonStyle(.borderedProminent)
}

在这里插入图片描述
actions闭包支持添加多个Button的。

写在最后

虽然可以使用VStackText实现类似的结果,但ContentUnavailableView为处理重复性任务节省了大量时间。此外,它还确保了跨不同平台的一致和吸引人的外观,毕竟我们的App有可能是同时支持iOStvOS以及AppleWatch的。

最后,希望能够帮助到有需要的朋友,如果您觉得有帮助,还望点个赞,添加个关注,笔者也会不断地努力,写出更多更好用的文章。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/848480.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【考研数学】基础到强化如何衔接? 强化阶段该怎么用书?

我的个人经验在强化阶段之前,只需要基本题型都掌握就足够了。 就比如1800基础篇的习题,你盖住答案自己能做对八九成,那就进入强化绝对够够的了。😉 强化的时候,你的正确率可能骤降到三四成,但是完全不用慌!…

【C语言】详解函数(下)(庖丁解牛版)

文章目录 1. 前言2. 数组做函数形参3. 函数嵌套调用和链式访问3.1 嵌套调用3.2 链式访问 1. 前言 详解C语言函数(上)的链接:http://t.csdnimg.cn/EGsfe 经过对函数的初步了解之后,相信大家已经对C语言标准库里的函数已经有初步的认知了,并且还学会了如…

C++面试经验分享

C面经 文章目录 C面经智能指针**内存泄露与智能指针****智能指针有什么类型,各自的原理有什么区别 / 解释下智能指针的实现原理****shared_ptr怎么实现多指针指向同一个地址****引用计数如何保证不同类实例的指针之间共享同步****循环引用会在什么情况下产生&#x…

MATLAB基础应用精讲-【数模应用】二元Logit分析(补充篇)(附python和R语言代码实现)

目录 几个高频面试题目 Logistic与多重线性回归区别 什么情况下用Logistic回归 算法原理

设计模式-工厂方法(创建型)

创建型-工厂方法 简单工厂 将被创建的对象称为“产品”,将生产“产品”对象称为“工厂”;如果创建的产品不多,且不需要生产新的产品,那么只需要一个工厂就可以,这种模式叫做“简单工厂”,它不属于23中设计…

nvme-cli常见命令分析

一、背景 nvme-cli命令常常用于获取或者设置SSD参数,比如常见的nvme list,nvme id-ctrl等,都是获取SSD的基本信息,也有nvme admin-passthru用于读取或者设置自定义命令。作为使用者,我们并不知道nvme-cli源码怎么实现…

光波长 深入程度

UV深入程度(UVC, UVB, UVA)https://mp.weixin.qq.com/s?__bizMzkwNTM0Njk3MA&mid2247483934&idx1&sn92d1ba67ead404e7714af11ec0526786&chksmc0f868ebf78fe1fd0610493e6f49a5d90835a20a829a900746906cda12f2fa12…

ultralytics-极市平台打榜

ultralytics 应用教程 ultralytics简介 UltralyticsYOLOv8YOLOv8 基于深度学习和计算机视觉领域的尖端技术,在速度和准确性方面具有无与伦比的性能。其流线型设计使其适用于各种应用,并可轻松适应从边缘设备到云 API 等不同硬件平台。链接 安装教程 作为第三方python包直接…

深入探讨Python高级技术

Python作为一种广泛应用的编程语言,以其简洁、易读和强大的功能著称。在高级应用中,Python不仅在数据科学、人工智能和自动化等领域大放异彩,还在性能优化、异步编程和元编程等方面表现出色。本文将深入探讨Python高级技术,包括但不限于性能优化、多线程与多进程编程、异步…

c#通过sqlsugar查询信息并日期排序

c#通过sqlsugar查询信息并日期字段排序 public static List<Sugar_Get_Info_Class> Get_xml_lot_xx(string lot_number){DBContext<Sugar_Get_Info_Class> db_data DBContext<Sugar_Get_Info_Class>.OpDB();Expression<Func<Sugar_Get_Info_Class, b…

RuoYiConfig新增一个路径存储用户头像

/** 上传头像路径 */ private static String userAvatar; public static String getUserAvatar() {return userAvatar; }public void setUserAvatar(String userAvatar) {RuoYiConfig.userAvatar userAvatar; } /*** 获取头像上传路径*/ public static String getUserAvata…

hcia datacom学习(12):vlan间路由

不同vlan相当于不同网段&#xff0c;如果vlan间没有三层技术&#xff0c;那么它们就无法互相通信。 vlan间路由可以有3种方式&#xff1a; 1.直接使用路由器转发 *路由器本身不需要额外设置&#xff0c;只需配置端口ip作为网关即可。 *路由器不能处理带有vlan标签的数据帧&a…

IP、掩码、网关、DNS1、DNS2到底是什么东西,ping telnet测试

IPV4里面的IP、掩码、网关、DNS1、DNS2到底是什么东西?请用通俗的大白话来解释,让农民都能看懂 好的,我来尝试用大白话解释一下IPV4里面的IP、掩码、网关、DNS1、DNS2是什么东西。 首先,我们可以把互联网想象成一个巨大的农村,每个家庭(电脑或设备)都需要有一个地址,这…

springboot3 一些听课笔记(1)

文章目录 一、日志框架二、springboot 自动配置三 、springweb3.13.2 自己编写一个messageconvert3.2.2 如果我们想让其支持yaml格式呢&#xff1f; 一、日志框架 springboot底层 默认使用logbacksjf4j作为日志框架。 1、每个 starter 场景&#xff0c;都会导入一个核心场景 …

10_JavaWeb过滤器

文章目录 过滤器1.过滤器的实现1.1 实现过滤器1.2 配置过滤器1.2.1 过滤器的xml方式1.2.2 过滤器的注解方式 2. 过滤器的生命周期3. 过滤器链使用 过滤器 生活举例: 公司前台,停车场安保,地铁验票闸机 java中过滤仅仅是对请求做出过滤 客户端向服务器发出请求&#xff0c;在服…

Java微服务实战:使用Spring Boot构建高效服务

引言 在当今的软件开发实践中&#xff0c;微服务架构已成为推动快速开发和部署的关键因素之一。与传统的单体应用相比&#xff0c;微服务架构提供了更高的灵活性和可维护性。本文将探讨如何使用Java和Spring Boot来构建一个微服务应用&#xff0c;介绍基本概念&#xff0c;并通…

Jail管理器AppJail的使用@FreeBSD

Jail的简介 Jail是FreeBSD操作系统中一个功能强大的安全机制&#xff0c;自FreeBSD 4.X版本起便投入使用&#xff0c;并且随着系统的发展&#xff0c;其功能、效率、稳定性和安全性得到了持续的强化。 Jail基于chroot的概念&#xff0c;通过更改一系列程序的根目录&#xff0…

Python爬虫之BeautifulSoup模块

Python爬虫之BeautifulSoup模块 在网络爬虫的世界里&#xff0c;获取网页内容只是第一步。真正的挑战在于从HTML的大海中提取出你需要的信息。这就是BeautifulSoup发光发热的地方。作为Python中最受欢迎的HTML解析库之一&#xff0c;BeautifulSoup以其强大的功能和易用性赢得了…

基于包围盒的机械臂防碰撞算法matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 5.完整工程文件 1.课题概述 基于包围盒的机械臂防碰撞算法。在实际情况中&#xff0c;由于很多对象结构较为复杂&#xff0c;当目标对象与障碍物之间的包围盒相交的时候&#xff0c;而两个物体并不相交。这就需要进一步划…

初始化git项目,并推送到github上

git推送到github上 要将当前的Git项目推送到GitHub上&#xff0c;可以按照以下步骤进行操作&#xff1a; 在GitHub上创建一个新的仓库。请确保你已经登录到你的GitHub账号&#xff0c;并点击页面右上角的" New repository"按钮来创建一个新的仓库。根据提示填写仓库…