文档#
SwiftUI | Apple Developer Documentation
SwiftUI 的大分类结构概述#
以下是 SwiftUI 的大分类和对应用途的整体结构表:
| 分类 | 主要功能 | 组成模块 |
|---|---|---|
| 视图(View) | 构建 UI 的基本单元,包括文本、图片、按钮和形状等。 | Text, Image, Button, Shape |
| 布局系统 | 控制视图的排列布局以及响应式处理。 | HStack, VStack, ZStack, Spacer |
| 数据驱动编程 | 使用数据绑定动态更新视图,响应数据状态变化。 | State, Binding, ObservedObject |
| 数据展示 | 展示大数据量内容,支持懒加载与滚动显示。 | List, ScrollView, Lazy* 系列 |
| 导航与容器 | 管理界面层次和页面跳转。 | NavigationView, TabView, Group |
| 表单与输入控件 | 数据输入及其交互组件。 | TextField, Toggle, Picker |
| 动画与事务 | 提供隐式和显式动画的支持,以及视图的过渡和协调动画。 | .animation, .transition, matchedEffect |
| 手势与交互 | 识别和处理用户的手势、滑动、拖拽等交互行为。 | .onTapGesture, .gesture, .swipeActions |
| 绘图与图形 | 绘制路径、形状和渐变效果。 | Path, Shape, Canvas, Gradients |
| 状态和生命周期管理 | 管理视图和应用的声明周期状态,监听生命周期事件。 | App, Scene, .onAppear, .onDisappear |
| 通知与事件处理 | 监听事件和系统通知,通过 Combine 框架实现响应式事件处理。 | .onReceive, NotificationCenter |
| 可访问性支持 | 提升应用的无障碍支持,适配 VoiceOver 等工具。 | .accessibilityLabel, .accessibilityHint |
| 资源管理 | 持久化本地化数据以及资源文件管理。 | @AppStorage, Image Assets, .ignoresSafeArea |
| 跨平台支持 | 支持 iOS、macOS、watchOS 和 tvOS 跨平台开发。 | PlatformModifiers, Universal Code |
接下来,我们将用细分表格列出各分类内的主要细分。
1. 视图 (View)#
| 子模块 | 功能 |
|---|---|
Text | 显示静态文本内容。 |
Image | 显示图片资源,用于界面装饰或标志。 |
Button | 提供按钮交互,触发用户行为逻辑。 |
Link | 点击后打开指定的 URL(适合深度链接及外部浏览)。 |
Shape | 绘制几何形状,如 Circle, Rectangle 等。 |
2. 布局系统#
| 子模块 | 功能 |
|---|---|
HStack | 将子视图水平排列。 |
VStack | 将子视图垂直排列。 |
ZStack | 将子视图按照层叠顺序排列,类似 Photoshop 图层。 |
Spacer | 在某些布局中创建可伸缩的空白,用于动态分配空间。 |
GeometryReader | 提供对父视图尺寸和位置的访问,支持响应式布局。 |
3. 数据驱动编程#
| 子模块 | 作用 |
|---|---|
@State | 用于存储和更新视图的局部状态。 |
@Binding | 父子视图之间共享状态,用于双向数据绑定。 |
@ObservedObject | 监听对象的变化(配合 @Published 来发布值变化)。 |
@EnvironmentObject | 用于跨视图共享数据,适合全局模型数据的共享。 |
@AppStorage | 存储简单键值对数据到 UserDefaults,用于持久化本地数据。 |
4. 数据展示#
| 子模块 | 功能 |
|---|---|
List | 显示动态或静态的垂直滚动列表内容,可结合 Navigation 使用。 |
ScrollView | 支持水平或垂直滚动的内容显示,包括组合内容。 |
LazyVStack | 垂直懒加载高效地渲染长列表视图。 |
LazyHStack | 水平懒加载布局,适合大量数据场景。 |
ForEach | 结合集合数据动态渲染视图内容。 |
5. 导航与容器#
| 子模块 | 作用 |
|---|---|
NavigationView | 包裹内容视图并支持导航功能。 |
NavigationLink | 指定点击后跳转的目标页面。 |
TabView | 创建多页面选项卡式的导航,适合大模块切换使用。 |
Group | 视图分组,不影响表现但为逻辑组织提供便利。 |
Divider | 添加一条分割线,可在不同布局元素之间使用。 |
6. 表单与输入控件#
| 子模块 | 功能 |
|---|---|
TextField | 文本输入控件,用于用户输入简单文本内容。 |
SecureField | 密码输入控件,隐藏字符显示。 |
Toggle | 开关控件(on/off 切换)。 |
Picker | 选择器控件,可用来选择单选或多选的列表值。 |
DatePicker | 日期或时间选择控件,支持多种格式。 |
Slider | 滑动条控件,用于数值选择或范围控制。 |
7. 动画与事务#
| 子模块 | 作用 |
|---|---|
.animation | 为视图变换添加隐式动画。 |
.withAnimation | 创建显式动画效果,结合异步操作使用。 |
.transition | 定义视图显示和消失时的过渡动画。 |
.matchedGeometryEffect | 跨视图共享动画效果,用于复杂视图间的流畅动画。 |
8. 手势与交互#
| 子模块 | 功能 |
|---|---|
.onTapGesture | 轻触时触发事件。 |
.onLongPressGesture | 长按时触发事件。 |
.gesture | 接收其他复杂手势的事件(如拖动或缩放)。 |
.swipeActions (iOS 15+) | 添加滑动操作(比如左滑删除)。 |
9. 绘图与图形#
| 子模块 | 作用 |
|---|---|
Path | 描述自定义路径,用于绘制复杂形状。 |
Shape | 内置简单形状,例如矩形(Rectangle)、圆形(Circle)。 |
Canvas (iOS 16+) | 类似于画布的绘制环境,可以自由绘制动态内容。 |
LinearGradient, RadialGradient | 定义线性或放射状渐变效果。 |
10. 状态与生命周期管理#
| 子模块 | 作用 |
|---|---|
App | 定义 SwiftUI 应用的入口类(替代传统的 UIApplicationDelegate)。 |
Scene | SwiftUI 的应用生命周期场景层级,支持多窗口等特性(如 WindowGroup)。 |
.onAppear | 在视图出现在屏幕时调用。 |
.onDisappear | 在视图从屏幕移除时调用。 |
11. SwiftUI 的设计理念总结#
SwiftUI 的体系结构是模块化的,关注点独立,从视图构建到动画和多平台支持,解决了大量传统 UI 开发的繁琐问题。整个结构以“声明式编程”和“响应式绑定”为核心,通过对视图(View)、布局系统、数据驱动编程等功能的划分,使开发者能快速掌握并高效使用。
核心修饰符#
在 SwiftUI 中,以下是按功能分类的 SwiftUI 核心修饰符列表,涵盖布局、样式、交互、动画等关键领域:
1. 布局修饰符#
尺寸与位置#
.padding(_:_:)
控制视图内边距(支持方向选择)。Text("Hello").padding(10) // 四周内边距 Text("Hello").padding(.top, 20) // 仅顶部内边距.offset(_:)
直接偏移视图的渲染位置(不影响布局计算)。Text("Offset").offset(x: 10, y: 20).position(_:)
在父视图坐标系中绝对定位。Text("Center").position(x: 200, y: 100).fixedSize()
阻止视图被压缩或拉伸,保持理想尺寸。Text("Fixed").fixedSize().layoutPriority(_:)
调整视图在布局冲突中的优先级(默认优先级为 0)。Text("High Priority").layoutPriority(1)
2. 外观修饰符#
颜色与形状#
.foregroundColor(_:)
设置前景色(文本、图标等)。Text("Red Text").foregroundColor(.red).background(_:alignment:)
添加背景视图(颜色、形状或其他视图)。Text("Hello").background(Color.yellow).cornerRadius(_:)
设置圆角半径(需配合background或边框使用)。Rectangle().cornerRadius(10).shadow(color:radius:x:y:)
添加阴影效果。Circle().shadow(color: .gray, radius: 5, x: 2, y: 2).overlay(_:alignment:)
在视图上方叠加内容。Circle().overlay(Text("Overlay"), alignment: .center).clipShape(_:)
将视图裁剪为指定形状。Image("cat").clipShape(Circle())
3. 交互修饰符#
手势与事件#
.onTapGesture(count:perform:)
点击手势(支持双击)。Text("Tap Me").onTapGesture { print("Tapped!") }.onLongPressGesture(...)
长按手势。Text("Long Press").onLongPressGesture(minimumDuration: 1) { ... }.gesture(_:)
添加自定义手势(如拖拽、缩放)。Image("photo").gesture(DragGesture().onChanged { ... }).disabled(_:)
禁用视图的交互。Button("Submit") { ... }.disabled(isLoading)
4. 状态与数据流#
生命周期与数据绑定#
.onAppear(perform:)/.onDisappear(perform:)
视图出现/消失时触发操作。Text("Hello").onAppear { fetchData() }.onChange(of:perform:)
监听特定值的变化。@State var count = 0 Text("Count: \(count)").onChange(of: count) { print("New value: \($0)") }.task(priority:_:)
异步任务(自动取消于视图消失时)。Text("Load Data").task { await loadData() }
5. 导航与弹窗#
导航控制#
.navigationTitle(_:)/.navigationBarTitleDisplayMode(_:)
设置导航标题和显示模式。NavigationView { Text("Home").navigationTitle("Main") }.sheet(isPresented:onDismiss:content:)
显示模态视图。Button("Show Sheet") { showSheet.toggle() } .sheet(isPresented: $showSheet) { SheetView() }.alert(isPresented:content:)
显示警告框。Button("Delete") { showAlert.toggle() } .alert("Confirm", isPresented: $showAlert) { Button("Delete", role: .destructive) { ... } }
6. 动画与过渡#
动画效果#
.animation(_:value:)
为特定值的变化添加动画。@State var scale = 1.0 Button("Scale") { scale += 0.5 } .scaleEffect(scale) .animation(.spring(), value: scale).transition(_:)
定义视图插入或移除时的过渡效果。if showView { Text("Hello").transition(.slide) }
7. 环境与配置#
环境变量#
.environment(_:_:)
设置环境值(如字体、颜色模式)。ContentView().environment(\.colorScheme, .dark).environmentObject(_:)
注入可观察对象。ContentView().environmentObject(UserSettings())
8. 列表与表格#
列表样式#
.listRowInsets(_:)
调整列表行的内边距。List { Text("Row 1").listRowInsets(EdgeInsets(top: 0, leading: 20, bottom: 0, trailing: 20)) }.listStyle(_:)
设置列表样式(如分组、侧边栏)。List { ... }.listStyle(.sidebar)
9. 调试与预览#
开发工具#
.border(_:width:)
快速查看视图的边界。Text("Debug").border(Color.red).redacted(reason:)
显示占位内容(用于预览加载状态)。Text("Loading...").redacted(reason: .placeholder)
10. 平台特定#
平台适配#
.ignoresSafeArea(_:edges:)
让视图忽略安全区域(全屏显示)。Color.blue.ignoresSafeArea(.all).statusBarHidden(_:)
隐藏状态栏(iOS)。ContentView().statusBarHidden(true)
总结#
这些修饰符是 SwiftUI 开发中的核心工具,掌握它们可以高效实现以下功能:
- 布局控制:
frame、padding、offset - 样式设计:
background、foregroundColor、cornerRadius - 交互响应:
onTapGesture、gesture - 状态管理:
onAppear、onChange - 动画与过渡:
animation、transition
建议结合官方文档和实际项目实践,逐步掌握它们的组合使用技巧!