SwiftUI之深入解析ContentUnavailableView的实战应用

一、基本用法

  • SwiftUI 引入了新的 ContentUnavailableView 类型,允许在应用程序中展示空状态、错误状态或任何其他内容不可用的状态。那么,如何使用 ContentUnavailableView 引导用户浏览应用程序中的空状态呢?
  • 首先看看 ContentUnavailableView 视图的基本用法:
struct ContentView: View {let store: Storevar body: some View {NavigationStack {List(store.products, id: \.self) { product inText(verbatim: product)}.navigationTitle("Products").overlay {if store.products.isEmpty {ContentUnavailableView("Connection issue",systemImage: "circle")}}}}
}

在这里插入图片描述

  • 在这个示例中,将 ContentUnavailableView 定义为产品列表的叠加层。每当产品列表为空时,使用带有标题和图像的 ContentUnavailableView 显示,ContentUnavailableView 的另一种变体还允许定义当前状态的描述文本。

二、自定义视图

  • ContentUnavailableView 还允许在描述文本下方显示操作按钮。因此,ContentUnavailableView 初始化程序的另一种变体允许我们使用 ViewBuilder 闭包定义视图的每个部分,从而完全自定义其外观和感觉。
struct ContentView: View {let store: Storevar body: some View {NavigationStack {List(store.products, id: \.self) { product inText(verbatim: product)}.navigationTitle("Products").overlay {if store.products.isEmpty {ContentUnavailableView {Label("Connection issue", systemImage: "wifi.slash")} description: {Text("Check your internet connection")} actions: {Button("Refresh") {store.fetch()}}}}}}
}

在这里插入图片描述

三、搜索屏幕使用

  • 在搜索屏幕显示搜索结果时,可以使用 ContentUnavailableView 类型的搜索功能。它由框架本地化,并遍历视图层次结构以找到搜索栏并提取其文本以显示在视图内。
struct ContentView: View {@Bindable var store: Storevar body: some View {NavigationStack {List(store.products, id: \.self) { product inText(verbatim: product)}.navigationTitle("Products").overlay {if store.products.isEmpty {ContentUnavailableView.search}}.searchable(text: $store.query)}}
}

在这里插入图片描述

四、手动提供查询

  • 还可以通过使用 ContentUnavailableView 类型的搜索功能并提供单个参数来手动将查询输入描述中:
struct ContentView: View {@Bindable var store: Storevar body: some View {NavigationStack {List(store.products, id: \.self) { product inText(verbatim: product)}.navigationTitle("Products").overlay {if store.products.isEmpty {ContentUnavailableView.search(text: store.query)}}.searchable(text: $store.query)}}
}

在这里插入图片描述

五、完整可运行示例

  • 由于代码片段中的 Store 类型未提供,使用一个简化版本的示例代码来创建一个简单的 SwiftUI Demo,以展示 ContentUnavailableView 的基本使用。创建一个简单的 Product 结构体表示产品,以及一个 ProductStore 类作为存储产品的模拟服务。在 ContentView 中,使用 ContentUnavailableView 来处理产品为空的情况。
import SwiftUIstruct Product: Identifiable {let id: UUIDlet name: String
}class ProductStore: ObservableObject {@Published var products: [Product] = []func fetchProducts() {// Simulating product fetchingDispatchQueue.main.asyncAfter(deadline: .now() + 2) {self.products = [Product(id: UUID(), name: "iPhone"), Product(id: UUID(), name: "iPad")]}}
}struct ContentView: View {@StateObject var store = ProductStore()var body: some View {NavigationView {List(store.products) { product inText(product.name)}.navigationTitle("Products").overlay {if store.products.isEmpty {ContentUnavailableView("No Products",systemImage: "exclamationmark.triangle")}}.onAppear {store.fetchProducts()}}}
}struct ContentView_Previews: PreviewProvider {static var previews: some View {ContentView()}
}
  • 请确保在 Xcode 中创建一个新的 SwiftUI 项目,并将上述代码替换到主 ContentView 中,然后运行该项目。在项目的初始加载时,ContentUnavailableView 将显示“No Products”消息,几秒后模拟产品加载,之后产品列表将显示在主视图中。

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

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

相关文章

3D目标检测(教程+代码)

随着计算机视觉技术的不断发展,3D目标检测成为了一个备受关注的研究领域。与传统的2D目标检测相比,3D目标检测可以在三维空间中对物体进行定位和识别,具有更高的准确性和适用性。本文将介绍3D目标检测的相关概念、方法和代码实现。 一、3D目…

Python-1-字符串类型及方法

众所周知,Python面向对象,功能强大 | ू•ૅω•́)ᵎᵎᵎ

某和医院招采系统web端数据爬取, 逆向js

目标网址:https://zbcg.sznsyy.cn/homeNotice 测试时间: 2024-01-03 1 老规矩,打开Chrome无痕浏览,打开链接,监测网络,通过刷新以及上下翻页可以猜测出数据的请求是通过接口frontPageAnnouncementList获取的,查看返回可以看出来数据大概率是经过aes加密的,如图: 通过查看该请…

FLatten Transformer:聚焦式线性注意力模块

线性注意力将Softmax解耦为两个独立的函数,从而能够将注意力的计算顺序从(querykey)value调整为query(keyvalue),使得总体的计算复杂度降低为线性。然而,目前的线性注意力方法要么性能明显不如Softmax注意力,并且可能涉及映射函数…

搜维尔科技:【简报】第九届元宇宙数字人设计大赛,报名已经进入白热化阶段!

随着元宇宙时代的来临,数字人设计成为了创新前沿领域之一。为了提高大学生元宇宙虚拟人角色策划与美术设计的专业核心能力,我们特别举办了这场元宇宙数字人设计赛道,赛道主题为「AI人工智能科技」 ,只要与「AI人工智能科技」相关的…

SpringBoot项目处理 多数据源问题(把本地库数据 推送 到另外一个平台的库)

一、需求梳理 把我方数据库的表中数据 ----------> 推送到第三方的数据库 相当于库对库的数据插入, 但是需要的是用代码的方式实现; 二、解决思维 (1) 首先,平台与平台之间的数据库对接; 处理点1: 字段转换 (库表之间的数据字段不一致问题) 解决方式: 挨个字段的对应,如…

es索引数据过滤查询

1.我们往kibana插入数据,来进行查询 POST /t1/_doc/ {"name":"cat","age":"18","address":"BJ","job":"dev" } POST /t1/_doc/ {"name":"dog","age":"1…

雍禾医疗亮相博鳌论坛 雍禾植发让小城市也能治“毛”病

颜值经济时代,伴随着居民消费水平的提高与受脱发困扰群体的逐步扩张,人们对毛发健康与毛发美观的关注度日益增长。需求催生了毛发医疗行业的飞速发展,为脱发群体提供爱美、求美、变美的新思路、新契机。 近期,2023中国企业家博鳌…

第一部分:vue学习(26-x)

文章目录 26.绑定class样式27 绑定style内联样式28 条件渲染29 列表渲染 26.绑定class样式 案例1:点击切换class样式。其中noarmal happy都是css定义好的样式。 案例2:切换随机的样式。 案例3:css样式,列表生效 案例4&#xff1…

CUDA动态并行

一、简介 1. 综述 动态并行是 CUDA 编程模型的扩展,使 CUDA 内核能够直接在 GPU 上创建新工作并与其同步。 在程序中任何需要的地方动态创建并行性都提供了令人兴奋的功能。 直接从 GPU 创建工作的能力可以减少在主机和设备之间传输执行控制和数据的需要&#xf…

顶帽运算在OpenCv中的应用

项目背景 假如我们拍了一张自拍,想为自己的照片添加一个酷炫的火星飞舞的效果,素材库中正好有一张火焰的照片,如果想去除图中的火焰,只保留火星效果,可以使用顶帽子算法 图片中的火星部分正好属于比周围亮一些的斑块…

C++第四天

定义一个Person类,私有成员int age,string &name,定义一个Stu类,包含私有成员double *score,写出两个类的构造函数、析构函数、拷贝构造和拷贝赋值函数,完成对Person的运算符重载(算术运算符、条件运算…