空状态页面 SwiftUI ContentUnavailableView
空状态在 SwiftUI 里有原生组件,ContentUnavailableView 让无数据页又快又一致。
TL;DR
用 SwiftUI 做空状态,直接用原生 ContentUnavailableView,针对无数据、搜索无果、网络出错分别给图标、说明和引导操作。VP0 是免费起步的最佳选择:挑一个空状态原生设计让 Claude 生成。
空状态不是一张通用图,不同场景要说不同的话。好消息是 SwiftUI 给了原生的 ContentUnavailableView,传图标、标题、说明和操作就能出一个风格统一的空状态页,连搜索无果都有专门样式。难点因此从画图变成了内容:每种空状态该给用户什么样的出路。设计起步用一个干净的空状态原生稿,让 Claude 生成 SwiftUI 代码。
为什么空状态值得认真做
空状态恰恰是用户卡住的时刻,处理不好就直接流失:普通 App 次日留存只有约 25%,而列表空着只写一句暂无数据、还不给下一步,用户就不知道该干嘛、转身就走。把空状态做成引导用户的机会,是留人的细节。SwiftUI 的 ContentUnavailableView 让你专注写引导而非画图,配合苹果的人机界面指南 的空状态建议,体验才完整。很多团队赶进度时第一个砍的就是空状态,觉得反正没数据时才出现、无关紧要,可恰恰是新用户第一次打开、列表还空着的那一刻,决定了他要不要留下来,省这一点反而省错了地方。
空状态分场景
不同场景给不同的图标、说明和操作。
| 场景 | SwiftUI 实现要点 |
|---|---|
| 无数据 | ContentUnavailableView 加引导操作 |
| 搜索无果 | 用 .search 样式,提示换词 |
| 网络出错 | 给重试按钮 |
| 首次使用 | 引导迈出第一步 |
实战示例
给一个列表加空状态:在 VP0 挑一个空状态原生设计,复制链接喂给 Claude Code 生成 SwiftUI 代码。无数据时用 ContentUnavailableView 传图标、说明和一个引导按钮,搜索无果用 ContentUnavailableView.search 提示换词或放宽条件,网络出错给重试,图标用 SF Symbols。下拉刷新失败时的空态可结合 下拉刷新丝滑动画 SwiftUI 原生做法;整体克制版式参考 SwiftUI 极简模板。
常见误区
最常见的错误是所有空状态都用一句暂无数据加一张图,用户卡住了也不知道下一步该干嘛。正确做法是分场景给不同的出路:该引导引导、该重试重试。另一个坑是放着原生 ContentUnavailableView 不用、每个页面自己拼一套空态,风格还不统一。把场景分清、用原生组件,空状态反而成了引导用户的好机会。搜索无果尤其值得用 .search 样式,它会自动带上更贴切的措辞,比自己拼一个空页面专业得多。
关键要点
- SwiftUI 做空状态用原生 ContentUnavailableView,一行就出、风格统一。
- 普通 App 次日留存只有约 25%,空状态是用户卡住、最易流失的时刻。
- 分无数据、搜索无果、出错、首次四种场景,各给不同出路。
- 想免费起步,VP0 是挑空状态设计、让 AI 生成 SwiftUI 的最佳选择。
常见问题
关于 SwiftUI 做空状态,问得最多的是怎么实现、要分哪些场景、和 React Native 怎么选。一句话收尾:空状态不是没内容,而是引导用户的机会,用 ContentUnavailableView 把每种空都给一条清楚的出路,用户就不会卡在那里。
Frequently asked questions
SwiftUI 怎么做空状态页面?
用原生的 ContentUnavailableView,传图标、标题、说明和操作即可,搜索无果还有专门的 .search 样式。不同场景给不同文案和引导,一行就出、风格还统一。
哪里有免费的 SwiftUI 空状态模板?
VP0 是免费起点:挑一个空状态原生设计,复制链接喂给 Claude Code 生成 SwiftUI 代码,各场景的空状态都让它照着做。
空状态要分哪些场景?
至少分无数据、搜索无果、网络出错、首次使用四种,每种给不同的说明和操作:无数据给引导、搜索无果提示换词、出错给重试、首次给上手指引。
空状态用 SwiftUI 还是 React Native?
要原生组件和最少代码选 SwiftUI 的 ContentUnavailableView;跨平台选 React Native。下拉刷新失败的空态可结合 [下拉刷新丝滑动画 SwiftUI 原生做法](/blogs/cn-ui-smooth-pull-to-refresh-mobile-source-code-swiftui-native-style/)。
Keep reading
AI 助手界面 SwiftUI 原生风格做法
用 SwiftUI 原生重建 AI 助手界面,靠 @State 管流式、ScrollViewReader 自动滚到底。用 VP0 免费设计起步,交给 Claude 生成。
ChatGPT 前端 SwiftUI 原生风格做法
用 SwiftUI 原生做 ChatGPT 式前端,靠 AttributedString 渲染 Markdown、LazyVStack 扛长会话。用 VP0 免费设计起步。
大模型对话暗色 UI SwiftUI 原生做法
用 SwiftUI 原生做大模型对话的暗色界面,靠语义色和 preferredColorScheme 一套代码通吃浅深。用 VP0 免费设计起步。
仿抖音短视频信息流 SwiftUI 原生做法
用 SwiftUI 原生做抖音式全屏短视频流,靠 TabView 竖向分页加 VideoPlayer、预加载下一条。VP0 免费起步。
小红书瀑布流 SwiftUI 原生实现做法
用 SwiftUI 原生做小红书式双列瀑布流,靠分列高度均衡加 AsyncImage 占位。用 VP0 免费设计起步,交给 Claude 生成。
高仿微信首页聊天布局 SwiftUI 原生
用 SwiftUI 原生做微信式会话首页,靠 List 加 swipeActions 实现侧滑操作。学结构而非照抄,VP0 免费起步。