名称: ios-ui-refactor 描述: 基于 Rams、Segall 和 Edson 原则的 iOS 26 / Swift 6.2 诊所架构应用的首席级 SwiftUI UI 审查和重构模式。在审核或改进现有 SwiftUI 屏幕、过渡、动画和视觉系统时使用,同时保留品牌身份并尊重诊所领域/数据/应用边界。
Apple HIG SwiftUI iOS 26 / Swift 6.2 最佳实践
一个首席设计师的视角,用于评估和重构 SwiftUI 界面以达到苹果质量标准,基于 Rams、Segall 和 Edson。包含 8 个类别的 51 条规则,每条规则都基于三本基础设计文本的具体原则:
- Dieter Rams — 好设计的十个原则(“少,但更好”,“设计应该诚实”)
- Ken Segall — 极其简单(简单作为直观、美丽产品的核心原则)
- John Edson — 像苹果一样设计(以设计为中心的文化,原型到完美,产品即营销)
类别按视觉审查过程排序:从移除什么开始,然后澄清什么,然后使什么诚实、不可见、系统化、彻底、持久,最后精炼什么。
范围与兄弟技能的关系
此技能是重构和审查视角 — 它评估现有 UI 并识别要修复的视觉反模式。当与 ios-design(构建新 UI)、ios-hig(HIG 合规)或 swift-refactor(代码级重构)一起加载时,此技能用更详细的“不正确 -> 正确”转换和“何时不应用”指导覆盖重叠规则。使用此技能进行审核和改进现有屏幕;使用兄弟技能进行绿地实现。
诊所架构合同 (iOS 26 / Swift 6.2)
此技能中的所有指导都假定诊所模块化 MVVM-C 架构:
- 功能模块仅导入
Domain+DesignSystem(从不Data,从不兄弟功能) - 应用目标是汇聚点,并拥有
DependencyContainer、具体协调器和路由外壳接线 Domain保持纯 Swift,并定义模型加存储库、*Coordinating、ErrorRouting和AppError合同Data拥有 SwiftData/网络/同步/重试/后台 I/O 并实现 Domain 协议- 读写流默认为陈旧-同时重新验证读取和乐观排队写入
- ViewModels 直接调用存储库协议(无默认用例/交互器层)
何时应用
参考这些指南当:
- 审查现有 SwiftUI 屏幕的视觉质量问题
- 审核屏幕上每个元素是否值得其位置(Rams #10)
- 评估界面是否无需工具提示即可自我解释(Rams #4)
- 检查颜色、状态和层次是否真实(Rams #6)
- 确保动画和材料不可见,而非装饰性(Rams #5)
- 验证间距、半径和颜色是否形成连贯系统(Edson “系统思考”)
- 确认边缘情况 — 减少运动、触摸目标、安全区域 — 已处理(Rams #8)
- 采用 iOS 26 / Swift 6.2 API,这些 API 精炼了以前不可能的交互(Edson “大声设计”)
按优先级排序的规则类别
| 优先级 | 类别 | 原则 | 影响 | 前缀 | 规则 |
|---|---|---|---|---|---|
| 1 | 少,但更好 | Rams #10 + Segall “思考最小化” | 关键 | less- |
7 |
| 2 | 自我解释设计 | Rams #4 + Segall “思考人性化” | 关键 | evident- |
6 |
| 3 | 诚实界面 | Rams #6 + Segall “思考残酷” | 关键 | honest- |
6 |
| 4 | 不可见设计 | Rams #5 + Edson “产品即营销” | 高 | invisible- |
6 |
| 5 | 系统,而非片段 | Edson “系统思考” + Rams #8 | 高 | system- |
6 |
| 6 | 彻底到最后一个细节 | Rams #8 + Rams #2 | 高 | thorough- |
7 |
| 7 | 持久胜过潮流 | Rams #7 + Edson “带着信念设计” | 中高 | enduring- |
5 |
| 8 | 通过迭代精炼 | Edson “大声设计” + Rams #1/#3 | 中 | refined- |
8 |
快速参考
1. 少,但更好(关键)
Rams #10: “好设计是尽可能少的设计。” Segall: 苹果通过拒绝一千件事而成功。
less-single-focal- 每个屏幕一个主要焦点less-type-restraint- 限制每个屏幕 3-4 种不同的字体处理less-one-typeface- 每个应用一种字体,通过重量和大小区分less-color-restraint- 保留饱和颜色用于小交互元素less-one-color-purpose- 每种语义颜色仅服务一个目的less-purposeful-motion- 每个动画必须传达状态变化或提供反馈less-fewer-controls- 移除不服务于核心任务的控件
2. 自我解释设计(关键)
Rams #4: “好设计使产品可理解。” Segall: 界面必须用人们理解的语言说话。
evident-visual-weight- 结合大小、重量和对比度形成层次evident-whitespace-grouping- 使用空白分隔概念组evident-progressive-disclosure- 使用渐进式披露处理密集信息evident-reading-order- 对齐视觉重量与逻辑阅读顺序evident-navigation-intent- 用于任务和创建的表单,用于向下钻取层次的推送evident-label-clarity- 使用清晰标签而非模糊图标
3. 诚实界面(关键)
Rams #6: “好设计是诚实的。” Segall: 清晰而不糖衣。
honest-semantic-colors- 使用语义颜色,从不硬编码黑色或白色honest-contrast- 确保 WCAG AA 对比度比率honest-dark-mode- 为每种自定义颜色定义浅色和深色变体honest-foreground-style- 使用 foregroundStyle 而非 foregroundColorhonest-depth-cues- 使用材料分层,而非用于深度的投影honest-loading-states- 显示真实进度,而非无限旋转器
4. 不可见设计(高)
Rams #5: “好设计不显眼。” Edson: 产品本身即营销。
invisible-spring-physics- 默认所有 UI 过渡使用弹簧动画invisible-spring-presets- 使用 .smooth 用于常规,.snappy 用于交互,.bouncy 用于愉悦invisible-no-easing- 对于 UI 元素,优先弹簧而非线性和 easeInOutinvisible-system-materials- 使用系统材料,而非自定义半透明背景invisible-symbol-effects- 使用内置 symbolEffect,而非手动符号动画invisible-content-transitions- 使用 contentTransition 用于更改文本和数字
5. 系统,而非片段(高)
Edson: “设计是系统思考。” Rams #8: 没有什么必须是任意的或留给机会。
system-spacing-grid- 使用 4pt 基础单位用于所有间距system-consistent-padding- 在所有屏幕上使用一致的填充system-corner-radii- 标准化每种组件类型的角半径system-alignment- 在屏幕内,每种内容类型使用一致的对齐system-color-naming- 按角色命名自定义颜色,而非色调system-brand-integration- 将品牌调色板映射到 iOS 语义颜色角色
6. 彻底到最后一个细节(高)
Rams #8: “设计过程中的关心和准确性显示对用户的尊重。” Rams #2: 如果用户不能可靠使用它,产品就失败了。
thorough-reduce-motion- 总是提供减少运动的后备thorough-touch-targets- 所有交互元素至少 44x44 点thorough-safe-areas- 总是尊重安全区域thorough-readable-weights- 避免正文文本使用轻字体重量thorough-vibrancy-levels- 匹配振动级别与内容重要性thorough-material-thickness- 根据对比需求选择材料厚度thorough-background-interaction- 为窥视式表单启用背景交互
7. 持久胜过潮流(中高)
Rams #7: “好设计是持久的。” Edson: 致力于跨越产品代际的声音。
enduring-system-text-styles- 使用苹果文本样式,从不固定字体大小enduring-weight-not-caps- 使用重量强调,而非全大写enduring-swipe-back- 从不破坏系统后退滑动手势enduring-zoom-navigation- 用于集合到细节导航的缩放过渡enduring-card-modularity- 用于仪表板布局的独立卡片
8. 通过迭代精炼(中)
Edson: “大声设计” — 无情地原型,直到每个交互感觉不可避免。 Rams #1: 创新服务于真实目的。
refined-scroll-transitions- 使用 scrollTransition 用于滚动位置视觉效果refined-phase-animator- 使用 PhaseAnimator 用于多步骤动画序列refined-mesh-gradients- 使用 MeshGradient 用于高级动态背景refined-text-renderer- 使用 TextRenderer 仅用于英雄文本动画refined-inspector- 使用 inspector 用于后边缘细节面板refined-multi-detent- 提供多个表单停靠点与拖拽指示器refined-matched-geometry- 使用 matchedGeometryEffect 用于上下文原点过渡refined-no-hard-cuts- 总是状态间动画,即使最小
如何使用
阅读单个参考文件获取详细解释和代码示例:
参考文件
| 文件 | 描述 |
|---|---|
| references/_sections.md | 类别定义和原则基础 |
| assets/templates/_template.md | 新规则模板 |
| metadata.json | 版本和参考信息 |