跳至正文
SwiftUI — Overview

Overview

文档

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(_:_:)
    控制视图内边距(支持方向选择)。

    swift
    Text("Hello").padding(10)          // 四周内边距
    Text("Hello").padding(.top, 20)   // 仅顶部内边距
    
  • .offset(_:)
    直接偏移视图的渲染位置(不影响布局计算)。

    swift
    Text("Offset").offset(x: 10, y: 20)
    
  • .position(_:)
    在父视图坐标系中绝对定位。

    swift
    Text("Center").position(x: 200, y: 100)
    
  • .fixedSize()
    阻止视图被压缩或拉伸,保持理想尺寸。

    swift
    Text("Fixed").fixedSize()
    
  • .layoutPriority(_:)
    调整视图在布局冲突中的优先级(默认优先级为 0)。

    swift
    Text("High Priority").layoutPriority(1)
    

2. 外观修饰符

颜色与形状

  • .foregroundColor(_:)
    设置前景色(文本、图标等)。

    swift
    Text("Red Text").foregroundColor(.red)
    
  • .background(_:alignment:)
    添加背景视图(颜色、形状或其他视图)。

    swift
    Text("Hello").background(Color.yellow)
    
  • .cornerRadius(_:)
    设置圆角半径(需配合 background 或边框使用)。

    swift
    Rectangle().cornerRadius(10)
    
  • .shadow(color:radius:x:y:)
    添加阴影效果。

    swift
    Circle().shadow(color: .gray, radius: 5, x: 2, y: 2)
    
  • .overlay(_:alignment:)
    在视图上方叠加内容。

    swift
    Circle().overlay(Text("Overlay"), alignment: .center)
    
  • .clipShape(_:)
    将视图裁剪为指定形状。

    swift
    Image("cat").clipShape(Circle())
    

3. 交互修饰符

手势与事件

  • .onTapGesture(count:perform:)
    点击手势(支持双击)。

    swift
    Text("Tap Me").onTapGesture { print("Tapped!") }
    
  • .onLongPressGesture(...)
    长按手势。

    swift
    Text("Long Press").onLongPressGesture(minimumDuration: 1) { ... }
    
  • .gesture(_:)
    添加自定义手势(如拖拽、缩放)。

    swift
    Image("photo").gesture(DragGesture().onChanged { ... })
    
  • .disabled(_:)
    禁用视图的交互。

    swift
    Button("Submit") { ... }.disabled(isLoading)
    

4. 状态与数据流

生命周期与数据绑定

  • .onAppear(perform:) / .onDisappear(perform:)
    视图出现/消失时触发操作。

    swift
    Text("Hello").onAppear { fetchData() }
    
  • .onChange(of:perform:)
    监听特定值的变化。

    swift
    @State var count = 0
    Text("Count: \(count)").onChange(of: count) { print("New value: \($0)") }
    
  • .task(priority:_:)
    异步任务(自动取消于视图消失时)。

    swift
    Text("Load Data").task { await loadData() }
    

5. 导航与弹窗

导航控制

  • .navigationTitle(_:) / .navigationBarTitleDisplayMode(_:)
    设置导航标题和显示模式。

    swift
    NavigationView {
      Text("Home").navigationTitle("Main")
    }
    
  • .sheet(isPresented:onDismiss:content:)
    显示模态视图。

    swift
    Button("Show Sheet") { showSheet.toggle() }
      .sheet(isPresented: $showSheet) { SheetView() }
    
  • .alert(isPresented:content:)
    显示警告框。

    swift
    Button("Delete") { showAlert.toggle() }
      .alert("Confirm", isPresented: $showAlert) { 
        Button("Delete", role: .destructive) { ... }
      }
    

6. 动画与过渡

动画效果

  • .animation(_:value:)
    为特定值的变化添加动画。

    swift
    @State var scale = 1.0
    Button("Scale") { scale += 0.5 }
      .scaleEffect(scale)
      .animation(.spring(), value: scale)
    
  • .transition(_:)
    定义视图插入或移除时的过渡效果。

    swift
    if showView {
      Text("Hello").transition(.slide)
    }
    

7. 环境与配置

环境变量

  • .environment(_:_:)
    设置环境值(如字体、颜色模式)。

    swift
    ContentView().environment(\.colorScheme, .dark)
    
  • .environmentObject(_:)
    注入可观察对象。

    swift
    ContentView().environmentObject(UserSettings())
    

8. 列表与表格

列表样式

  • .listRowInsets(_:)
    调整列表行的内边距。

    swift
    List {
      Text("Row 1").listRowInsets(EdgeInsets(top: 0, leading: 20, bottom: 0, trailing: 20))
    }
    
  • .listStyle(_:)
    设置列表样式(如分组、侧边栏)。

    swift
    List { ... }.listStyle(.sidebar)
    

9. 调试与预览

开发工具

  • .border(_:width:)
    快速查看视图的边界。

    swift
    Text("Debug").border(Color.red)
    
  • .redacted(reason:)
    显示占位内容(用于预览加载状态)。

    swift
    Text("Loading...").redacted(reason: .placeholder)
    

10. 平台特定

平台适配

  • .ignoresSafeArea(_:edges:)
    让视图忽略安全区域(全屏显示)。

    swift
    Color.blue.ignoresSafeArea(.all)
    
  • .statusBarHidden(_:)
    隐藏状态栏(iOS)。

    swift
    ContentView().statusBarHidden(true)
    

总结

这些修饰符是 SwiftUI 开发中的核心工具,掌握它们可以高效实现以下功能:

  1. 布局控制:frame、padding、offset
  2. 样式设计:background、foregroundColor、cornerRadius
  3. 交互响应:onTapGesture、gesture
  4. 状态管理:onAppear、onChange
  5. 动画与过渡:animation、transition

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

本文共 2314 字

评论

博客助手

正在打开博客助手…