Journal

空状态页面 SwiftUI ContentUnavailableView

空状态在 SwiftUI 里有原生组件,ContentUnavailableView 让无数据页又快又一致。

空状态页面 SwiftUI ContentUnavailableView: a reflective 3D App Store icon on a blue and purple gradient

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