大家好,我的开源项目PakePlus可以将网页/Vue/React项目打包为桌面/手机应用并且小于5M只需几分钟,官网地址:pakeplus.com

在 SwiftUI 中,View 是构建界面的核心抽象,其分类方式可从功能特性、渲染逻辑、组合方式等维度划分,核心可归纳为以下几类(并非官方强定义分类,而是基于实际开发场景的通用归纳),每类都有明确的设计目标和使用场景:
一、基础容器型 View(布局与组合核心)
这类 View 本身不承载可视化内容,核心作用是组织、布局子 View,是构建界面结构的基础。
核心特点:
- 无自有视觉样式,仅提供布局规则;
- 支持嵌套组合,可多层嵌套构建复杂结构;
- 遵循 SwiftUI 布局系统(父 View 提议尺寸 → 子 View 响应 → 父 View 最终布局)。
典型代表:
| View 名称 | 核心特点 |
|---|---|
VStack |
垂直方向排列子 View,可设置间距、对齐方式(leading/trailing/center 等) |
HStack |
水平方向排列子 View,支持分布方式(如 spacing、alignment) |
ZStack |
层叠排列子 View(Z 轴),可设置对齐方式,用于叠加视图(如文字盖在图片上) |
List/LazyVStack/LazyHStack |
懒加载容器,仅渲染可视区域内的子 View,优化大量数据列表性能(List 是更高层封装,含滚动、分割线等) |
Grid/LazyVGrid/LazyHGrid |
网格布局,通过 GridItem 定义列 / 行规则,支持自适应、固定尺寸、比例尺寸 |
Group |
仅用于组合多个 View(无布局逻辑),突破 body 单 View 限制,不影响布局 |
ScrollView |
可滚动容器,包裹超出屏幕的 View,支持垂直 / 水平滚动、是否显示滚动指示器 |
二、基础展示型 View(静态内容呈现)
这类 View 是界面的 "原子组件",用于展示静态文本、图像、形状等基础内容,自带可视化样式,无交互逻辑(需结合 modifier 扩展)。
核心特点:
- 专注内容呈现,样式可通过 modifier 定制(颜色、大小、圆角等);
- 大部分为 "无状态",仅依赖传入的数据源渲染;
- 轻量、高性能,无额外性能开销。
典型代表:
| View 名称 | 核心特点 |
|---|---|
Text |
文本展示,支持富文本(字体、颜色、行间距、截断方式)、本地化、动态字体 |
Image |
图片展示,支持本地资源、网络图片(需结合 AsyncImage)、系统 SF Symbols,可缩放、裁剪、设置渲染模式 |
Shape(协议) |
形状绘制基类,如 Rectangle/Circle/Capsule/Path,可填充、描边、设置阴影 |
Divider |
分隔线,默认水平 / 垂直,可定制颜色、厚度,用于分隔列表 / 布局元素 |
Spacer |
占位空白,自动填充布局剩余空间,用于调整子 View 位置(如推挤元素到两端) |
三、交互型 View(用户操作响应)
这类 View 核心作用是响应用户操作(点击、输入、选择等),自带交互逻辑,部分包含内置状态管理。
核心特点:
- 内置交互事件处理(如点击、拖拽、输入);
- 部分持有内部状态(如
Toggle的开关状态、TextField的输入文本); - 可通过绑定(
@Binding)与外部状态联动。
典型代表:
| View 名称 | 核心特点 |
|---|---|
Button |
点击响应,支持自定义样式(文字、图标、背景),绑定 action 处理逻辑 |
TextField/SecureField |
文本输入,绑定 @Binding 接收输入内容,支持键盘类型、占位符、输入限制 |
Toggle |
开关控件,绑定布尔值,支持自定义样式(如开关 / 复选框) |
Picker/DatePicker |
选择器,支持下拉、滚轮、日历等样式,绑定选中值,适配多平台样式 |
Slider/Stepper |
数值调整控件,绑定数值,支持范围限制、步长设置 |
Menu |
下拉菜单,支持多级菜单、自定义触发视图,适配 iOS/macOS 样式 |
Link |
跳转链接,支持打开 URL、应用内跳转,适配系统样式 |
四、容器修饰型 View(功能增强)
这类 View 本身是 "包装器",为子 View 增加特定功能(如滚动、弹窗、条件渲染),不改变子 View 的核心样式。
核心特点:
- 仅包裹一个子 View(或一组),提供附加功能;
- 功能可通过参数配置,不侵入子 View 逻辑;
- 部分支持动态切换(如条件渲染、动画)。
典型代表:
| View 名称 | 核心特点 |
|---|---|
NavigationStack/NavigationSplitView |
导航容器,支持页面跳转、导航栏定制、分栏布局(iPad/macOS) |
Sheet/FullScreenCover |
弹窗容器,以模态方式展示子 View,支持动画、背景交互控制 |
Alert/ConfirmationDialog |
提示弹窗,支持按钮操作、文本提示,绑定触发条件 |
ScrollViewReader |
滚动控制容器,支持滚动到指定位置、监听滚动位置 |
ForEach |
动态列表渲染,基于数据源生成多个子 View,支持标识(id)管理复用 |
if/else/switch(条件渲染) |
语法级容器,根据条件渲染不同 View,无额外性能开销 |
Animation(动画容器) |
为子 View 变化添加动画,支持时长、曲线、延迟配置 |
五、平台适配型 View(多端兼容)
这类 View 针对不同平台(iOS/macOS/tvOS/watchOS)做了样式和交互适配,核心逻辑统一,但展示形态随平台变化。
核心特点:
- 跨平台 API 统一,样式自动适配平台规范;
- 可通过
#if os(...)定制平台特有逻辑; - 部分仅在特定平台可用(如
MacOSWindow)。
典型代表:
| View 名称 | 核心特点 |
|---|---|
List |
iOS 为滚动列表,macOS 为表格,tvOS 为焦点列表,watchOS 为小型列表 |
Form |
表单容器,iOS 为分组列表,macOS 为表单布局,自动适配平台表单样式 |
TabView |
标签页容器,iOS 为底部标签,macOS 为顶部标签,tvOS 为焦点标签 |
SidebarList |
侧边栏列表(macOS/iPadOS),适配系统侧边栏样式、交互 |
六、自定义 View(业务封装)
开发者基于 View 协议自定义的 View,是 SwiftUI 组件化的核心,可封装复用逻辑。
核心特点:
- 遵循
View协议,实现body属性返回子 View; - 可通过
@State/@Binding/@ObservedObject管理状态; - 支持 modifier 扩展,可组合内置 View 实现复杂功能;
- 可封装业务逻辑,对外暴露简洁接口。
示例:
swift
scss
struct CustomButton: View {
let title: String
let action: () -> Void
var body: some View {
Button(action: action) {
Text(title)
.padding()
.background(Color.blue)
.foregroundColor(.white)
.cornerRadius(8)
}
}
}
核心总结
| 类型 | 核心目标 | 典型特征 |
|---|---|---|
| 基础容器型 | 布局与组合子 View | 无视觉样式,仅提供布局规则 |
| 基础展示型 | 呈现静态内容 | 轻量、无状态、样式可定制 |
| 交互型 | 响应用户操作 | 内置交互逻辑,支持状态绑定 |
| 容器修饰型 | 增强子 View 功能 | 包装器模式,附加特定功能 |
| 平台适配型 | 跨平台兼容 | 样式自动适配,API 统一 |
| 自定义 View | 业务逻辑封装与复用 | 遵循 View 协议,组合内置 View |
SwiftUI 的 View 设计核心是组合优于继承 ,所有 View 都是值类型(struct),通过 modifier 链式调用扩展功能,不同类型的 View 可灵活嵌套,构建复杂且高性能的界面。
大家好,我是1024小神,技术群 / 私活群 / 股票群 或 交朋友 都可以私信我。 如果你觉得本文有用,一键三连 (点赞、评论、关注),就是对我最大的支持~