SwiftUI

文档 #

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)。
SceneSwiftUI 的应用生命周期场景层级,支持多窗口等特性(如 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 开发中的核心工具,掌握它们可以高效实现以下功能:

  1. 布局控制framepaddingoffset
  2. 样式设计backgroundforegroundColorcornerRadius
  3. 交互响应onTapGesturegesture
  4. 状态管理onAppearonChange
  5. 动画与过渡animationtransition

建议结合官方文档和实际项目实践,逐步掌握它们的组合使用技巧!