讲解 UIKit 中的代码布局

Explaining Programmatic UILayouts for UIKit

使用纯 Swift 构建 UIKit 屏幕:自动布局、堆栈视图、可差异表格和搜索 – 无需故事板。

您将学到什么

  • 完全用代码构建 UIKit 屏幕;删除故事板并在 SceneDelegate 中设置根。
  • 掌握自动布局锚点和布局指南;正确连接 UIScrollView 内容/框架指南。
  • 使用适当的间距、对齐和分布通过 UIStackView 组成响应式 UI。
  • 创建一个小主题(颜色、间距、半径)以实现视觉一致性和重用。
  • 实现可重复使用的卡片组件和按钮,通过轻量级结构和闭包进行配置。
  • 使用 UITableView + Diffable Data Source 显示列表;通过带有动画的快照进行更新。
  • 使用 UISearchController 添加实时搜索并过滤结果而无需重复数组。
  • 在各个组件中应用可访问性、动态类型和暗模式友好样式。
  • 使用 MVVM 和依赖注入组织代码;轻松交换 Mock/Live API。
  • 调试布局问题:模糊的约束、安全区域错误和性能陷阱。

 

要求

  • 安装了 Xcode 15+ 的 Mac。
  • 基本 Swift 语法:变量、函数、结构/类、可选项。
  • 熟悉 UIKit(视图 + 视图控制器)。
  • 熟悉自动布局;堆栈视图经验很有帮助。
  • 安装了 iOS 15+ 模拟器(iPhone 设备是可选的)。
  • 了解如何创建和运行新的 Xcode 项目。
  • 基本表格视图和导航控制器概念。
  • 愿意构建没有故事板的 UI(程序化 UI)。
  • 能够阅读 Apple 文档并调试构建错误。
  • 可选:基本 Git(克隆/提交)来提取示例代码。

描述

“UIKit 程序化 UILayout 详解”是一门实践操作、实时编码的课程,教您如何完全使用 Swift 构建干净、可测试且可投入生产的 iOS 界面。我们首先移除 Storyboard,并通过 SceneDelegate 引导应用,然后使用锚点、布局指南和 UIStackView 布局视图,使您的屏幕能够适应不同的设备和动态类型。

您将创建一个小型设计系统(用于颜色/间距/半径的主题)和可复用组件(CardView、PrimaryButton、ActionCard)。在此基础上,我们将构建一个真正的功能:一个由 CarAPI(本课程模拟)驱动的汽车搜索屏幕。您将连接一个程序化的 UITableView,使用带有快照的 Diffable 数据源实现流畅的更新,并集成一个 UISearchController 来过滤结果,而无需重复数组。我们还将介绍滚动视图的最佳实践(contentLayoutGuide 与 frameLayoutGuide)、空/错误状态、货币格式、键盘行为以及暗黑模式。

架构保持务实:MVVM 风格的视图模型和依赖注入,方便您稍后将模拟 API 替换为实时 API。在此过程中,您将了解常见的陷阱以及如何调试它们——模糊的约束、安全区域错误以及移除 Storyboard 时经典的 init(coder:) 崩溃。

最后,您将能够:

  • 无需故事板即可启动应用程序并以编程方式构建屏幕。
  • 使用锚点和堆栈视图组成响应式布局。
  • 使用可区分数据源来呈现列表并通过快照进行更新。
  • 使用 UISearchController 添加快速、用户友好的搜索。
  • 通过可重复使用的组件和简单的主题提供一致的 UI。

如果您是一名 iOS 开发人员,希望减少 Interface Builder 方面的麻烦并获得更多控制权,那么本课程非常适合您。

本课程适合哪些人:

  • 想要抛弃故事板并完全用代码构建 UI 的 iOS 开发人员。
  • UIKit 开发人员正在寻求可重复使用的组件和小型设计系统。
  • SwiftUI-first 开发人员必须与 UIKit 代码库互操作或维护 UIKit 代码库。
  • 训练营/CS 学生正在准备 iOS 面试(表格、可区分、搜索)。
  • 独立制造商使用清晰的模式快速构建可用于生产的应用程序。
  • 依赖 UITableView + DiffableDataSource 的团队的新工程师。
  • 那些难以使用自动布局、堆栈视图和滚动视图的开发人员。
  • Web/Android 工程师正在转向 iOS 并希望获得实用的 UIKit。
  • 技术主管在团队中标准化程序化 UI 模式(MVVM、DI)。
  • 直接在 UIKit 中制作原型并希望可扩展结构的设计师/PM。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。