当前位置: 首页 > news >正文

iOS Widget 开发-1:什么是 iOS Widget?开发前的基本认知

随着 iOS 系统的不断演进,Widget(小组件)已经成为提升用户体验的重要组成部分。从 iOS 14 开始,Apple 引入了全新的 WidgetKit 框架,允许开发者使用 SwiftUI 创建高度可定制、灵活展示的 Widget,并可添加到主屏幕、锁屏界面甚至待机模式中。

本篇博客将从基础概念出发,带你了解 iOS Widget 的作用、类型、开发架构以及常见误区,为后续深入开发打下坚实基础。


Widget 是什么?

Widget 是 App 的一个延伸部分,运行在系统容器中的 UI 视图,用于在不打开主应用的前提下向用户展示关键信息。它强调 轻量、及时、可定制、非交互式 的特性。

它的主要特点包括:

  • 基于 SwiftUI 构建(不支持 UIKit)
  • 定期刷新数据,不支持实时长连接
  • 用户可添加多个尺寸、多个实例(如显示不同城市天气)
  • 与主 App 分离运行,仅在系统容器中展示

WidgetKit 简介

Apple 提供了一个专门用于创建 Widget 的框架:WidgetKitWidgetKit 提供了以下能力:

  • 定义数据源(Timeline)
  • 配置 Widget 展示内容
  • 与 Intent 配合实现动态参数配置
  • 通过 SwiftUI 构建视图结构

WidgetKit 的基础结构如下:

struct MyWidget: Widget {var body: some WidgetConfiguration {StaticConfiguration(kind: "MyWidget", provider: MyProvider()) { entry inMyWidgetView(entry: entry)}.supportedFamilies([.systemSmall, .systemMedium, .systemLarge]).configurationDisplayName("我的组件").description("显示一些有用的信息")}
}

你需要实现:

  • 一个 TimelineProvider 来提供数据快照
  • 一个 Entry 表示时间点的数据
  • 一个 View 构建视图
  • 一个 Widget 注册点

Widget 能做什么?

能力描述
展示信息展示天气、待办、日历、股票、计步等轻量信息
支持多尺寸用户可选小中大尺寸,StandBy Widget 等
点击跳转使用 .widgetURL() 支持跳转回主 App 或 Deep Link
用户配置支持通过 Intent 配置不同内容,如显示不同城市或分类
定期刷新可以设定刷新频率(最小15分钟),或由 App 主动请求刷新

Widget 做不了什么?

开发 Widget 时要注意其 运行环境是受限的沙盒容器,存在不少限制:

  • ❌ 不能执行网络请求(需在主 App 中处理)
  • ❌ 不支持交互控件(如 Button、TextField)
  • ❌ 无法响应手势(不能滑动或拖动)
  • ❌ 无法长时间运行后台任务
  • ❌ 不适合展示大量动态数据或长文本

Widget 展示位置有哪些?

iOS 系统支持在多个位置展示 Widget,按系统版本差异分为:

  • 主屏幕(Home Screen):iOS 14 起支持添加小组件到主屏幕
  • 锁屏(Lock Screen Widgets):iOS 16 起支持
  • 待机模式(StandBy Widgets):iOS 17 起支持横屏待机展示
  • 控制中心(Control Widgets) :iOS 18 起支持的控制展示 ✅

开发 Widget 需要准备什么?

开发 Widget 的前提:

  • 使用 Xcode 12+(推荐最新)
  • 开启 Widget Extension,与主 App 同属一个 App Group(用于共享数据)
  • 项目需支持 iOS 14+,推荐 iOS 16 或 17 起步
  • 熟悉 SwiftUI 开发语法与架构

常见误区

  1. Widget 是实时的?

    • ❌ 并非实时更新,只能定期刷新或 App 主动触发。
  2. 我能在 Widget 内请求 API?

    • ❌ 不行,Widget 运行时无法发起网络请求,必须预加载数据。
  3. 我能放按钮/滚动视图吗?

    • ❌ Widget 是非交互视图,无法接受用户输入或操作。

总结

Widget 是 iOS 提供给开发者向用户持续展示关键信息的高效方式,它强调轻量级、非交互、适配性强的视图呈现。尽管受限较多,但若能合理运用 App Group、SwiftUI 和 Timeline 机制,依旧可以实现极具吸引力和实用性的功能。

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

http://www.lryc.cn/news/581963.html

相关文章:

  • 动手学深度学习13.6. 目标检测数据集-笔记练习(PyTorch)
  • DSP学习笔记2
  • 轨迹优化 | 基于激光雷达的欧氏距离场ESDF地图构建(附ROS C++仿真)
  • 7月份最新代发考试战报:思科CCNP 华为HCIP HCSP 售前售后考试成绩单
  • 网络安全之XSS漏洞:原理、危害与防御实践
  • 南柯电子|显示屏EMC整改:工业屏与消费屏的差异化策略
  • 接口漏洞怎么抓?Fiddler 中文版 + Postman + Wireshark 实战指南
  • 告别Root风险:四步构建安全高效的服务器管理体系
  • AJAX vs axios vs fetch
  • 【算法笔记】5.LeetCode-Hot100-矩阵专项
  • 腾讯云录音文件快速识别实战教程
  • Java后端技术博客汇总文档
  • 无人机声学探测模块技术分析!
  • 【C++开源库使用】使用libcurl开源库发送url请求(http请求)去下载用户头像文件(附完整源码)
  • RESTful API概念和设计原则
  • Ubunt20.04搭建GitLab服务器,并借助cpolar实现公网访问
  • 01、通过内网穿透工具把家中闲置电脑变成在线服务器
  • Java 大视界 -- 基于 Java 的大数据可视化在企业供应链动态监控与优化中的应用(336)
  • 迅为RK3568开发板基本工程目录-OpenHarmony APP工程结构
  • 上传Vue3+vite+Ts组件到npm官方库保姆级教程
  • 基于ArcGIS的洪水灾害普查、风险评估及淹没制图技术研究​
  • 【LeetCode 热题 100】206. 反转链表——(解法二)指针翻转
  • UE5详细保姆教程(第四章)
  • Post-Training on PAI (2):Ray on PAI,云上一键提交强化学习
  • 暑假算法日记第三天
  • C++笔记之开关控制的仿真与实际数据处理优雅设计
  • GNN--知识图谱(逐步贯通基础到项目实践)
  • 数学建模从入门到国奖——备赛规划优秀论文学习方法
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(四十一) -> 获取自定义编译参数
  • 深入解析解释器模式:从理论到实践的完整指南