name: ios-storyboard description: 用于iOS 26 / Swift 6.2临床代码库中Storyboard和Interface Builder维护的遗留互操作性技能。仅用于现有storyboard屏幕的迁移或维护;不用于新的SwiftUI临床功能开发。触发条件包括Auto Layout、segues、size classes、IB accessibility、storyboard合并冲突以及storyboard到SwiftUI的迁移任务。
iOS Storyboard最佳实践
针对临床项目中仍然存在的storyboard-heavy代码的遗留互操作性指南。不用于新的SwiftUI临床功能开发。
全面的Xcode Storyboard和Interface Builder的UI设计和架构指南,专注于构建可维护、自适应和可访问的iOS界面。包含8个类别的45条规则,按影响优先级排序,以指导自动化重构和代码生成。
临床架构合约(iOS 26 / Swift 6.2)
本技能中的所有指导均基于临床模块化MVVM-C架构:
- 功能模块仅导入
Domain+DesignSystem(从不导入Data,也不导入同级功能) - 应用目标是汇聚点,拥有
DependencyContainer、具体协调器和Route Shell布线 Domain保持纯Swift,定义模型以及仓库、*Coordinating、ErrorRouting和AppError合约Data拥有SwiftData/网络/同步/重试/后台I/O,并实现Domain协议- 读写流默认为陈旧-验证重读和乐观排队写入
- ViewModel直接调用仓库协议(无默认用例/交互层)
何时应用
在以下情况下参考这些指南:
- 在Xcode Interface Builder中创建或修改Storyboard场景
- 为自适应布局设置Auto Layout约束
- 使用segues和storyboard引用设计导航流
- 为通用应用配置size classes和trait变体
- 审查storyboard XML差异并解决合并冲突
规则类别按优先级
| 优先级 | 类别 | 影响 | 前缀 |
|---|---|---|---|
| 1 | Storyboard架构 | 关键 | arch- |
| 2 | Auto Layout约束 | 关键 | layout- |
| 3 | 导航与Segues | 高 | nav- |
| 4 | 自适应布局与Size Classes | 高 | adapt- |
| 5 | 视图层次与Stack Views | 中高 | view- |
| 6 | 可访问性与VoiceOver | 中 | ally- |
| 7 | 版本控制与协作 | 中 | vcs- |
| 8 | 调试与检查 | 低中 | debug- |
快速参考
1. Storyboard架构(关键)
arch-split-storyboards- 将单体Storyboard拆分为功能模块arch-storyboard-references- 使用Storyboard引用进行跨模块导航arch-one-scene-per-flow- 将每个Storyboard限制为单个用户流arch-initial-view-controller- 在每个Storyboard中显式设置初始视图控制器arch-avoid-hardcoded-identifiers- 避免硬编码Storyboard和单元格标识符arch-scene-naming- 在文档大纲中使用描述性场景标签arch-modular-xibs- 将可重用视图提取到单独的XIB文件
2. Auto Layout约束(关键)
layout-avoid-fixed-dimensions- 避免固定的宽度和高度约束layout-leading-trailing- 使用Leading和Trailing代替Left和Rightlayout-safe-area- 将视图约束到安全区域指南layout-content-hugging- 设置内容拥抱和压缩阻力优先级layout-constraint-nearest-neighbor- 约束到最近邻视图layout-avoid-constant-offsets- 使用布局边距代替常量偏移layout-inequality-constraints- 使用不等式约束实现灵活的最小值和最大值layout-constraint-priorities- 为可选约束分配不同的优先级
3. 导航与Segues(高)
nav-prepare-for-segue- 通过prepare(for:sender:)传递数据,而不是直接属性访问nav-unwind-segues- 使用Unwind Segues向后导航nav-avoid-mixed-navigation- 避免混合使用Segue和编程导航nav-adaptive-segues- 使用Show和Show Detail代替Push和Modalnav-perform-segue-validation- 使用shouldPerformSegue验证Segue条件nav-container-view-controllers- 使用容器视图嵌入子视图控制器
4. 自适应布局与Size Classes(高)
adapt-size-classes- 使用Vary for Traits按Size Class配置约束adapt-trait-variations- 使用Trait变体进行字体和间距调整adapt-safe-area-all-devices- 在所有设备Size Class上测试自适应布局adapt-readable-content-guide- 在大屏幕上为文本使用可读内容指南adapt-dynamic-type- 支持所有文本标签的动态类型
5. 视图层次与Stack Views(中高)
view-prefer-stack-views- 对于线性布局,使用Stack Views代替手动约束view-avoid-deep-nesting- 避免超过两层的深度嵌套Stack Viewsview-intrinsic-content-size- 依赖标准UIKit控件的内在内容大小view-placeholder-intrinsic-size- 在Storyboard中为自定义视图使用占位符内在大小view-clip-to-bounds- 启用带圆角视图的裁剪到边界view-content-mode- 在Storyboard中为UIImageView设置正确的内容模式
6. 可访问性与VoiceOver(中)
ally-labels- 为所有交互元素设置可访问性标签ally-traits- 在Interface Builder中分配正确的可访问性特性ally-grouping- 为VoiceOver导航分组相关元素ally-identifiers- 为UI测试设置可访问性标识符ally-dynamic-labels- 为动态内容更新可访问性标签
7. 版本控制与协作(中)
vcs-one-scene-per-developer- 将Storyboard场景分配给单个开发者vcs-open-as-source- 在提交前以源代码形式审查Storyboard差异vcs-lock-storyboard-files- 对活动的Storyboard编辑使用Git文件锁定vcs-gitattributes-merge- 配置.gitattributes以对Storyboards使用联合合并
8. 调试与检查(低中)
debug-view-hierarchy- 使用调试视图层次检查布局问题debug-ambiguous-layout- 使用hasAmbiguousLayout在运行时检测约束问题debug-constraint-identifier- 为约束分配标识符以便日志可读debug-stale-outlets- 移除陈旧的出口连接以防止崩溃
如何使用
阅读单独的参考文件以获取详细解释和代码示例:
参考文件
| 文件 | 描述 |
|---|---|
| references/_sections.md | 类别定义和排序 |
| assets/templates/_template.md | 新规则的模板 |
| metadata.json | 版本和参考信息 |