文档
#
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. 动画与过渡
#
动画效果
#
7. 环境与配置
#
环境变量
#
8. 列表与表格
#
列表样式
#
9. 调试与预览
#
开发工具
#
10. 平台特定
#
平台适配
#
总结
#
这些修饰符是 SwiftUI 开发中的核心工具,掌握它们可以高效实现以下功能:
- 布局控制:
frame
、padding
、offset
- 样式设计:
background
、foregroundColor
、cornerRadius
- 交互响应:
onTapGesture
、gesture
- 状态管理:
onAppear
、onChange
- 动画与过渡:
animation
、transition
建议结合官方文档和实际项目实践,逐步掌握它们的组合使用技巧!