当前位置: 首页 > news >正文

SwiftUI基础组件之HStack、VStack、ZStack详解

文章目录

    • 引言
    • 一、HStack(水平堆栈)
      • 1.1 基本概念
      • 1.2 基本创建
      • 1.3 常用属性
        • 1.3.1 spacing
        • 1.3.2 alignment
    • 二、VStack(垂直堆栈)
      • 2.1 基本概念
      • 2.2 基本创建
      • 2.3 常用属性
        • 2.3.1 spacing
        • 2.3.2 alignment
    • 三、ZStack(深度堆栈)
      • 3.1 基本概念
      • 3.2 基本创建
      • 3.3 常用属性
        • 3.3.1 alignment
    • 四、综合案例

引言

在 SwiftUI 中,布局是构建用户界面的基础。HStackVStackZStack 是三个非常重要的容器视图组件,它们提供了强大而灵活的布局能力,能够帮助开发者轻松创建出各种复杂的界面。

一、HStack(水平堆栈)

1.1 基本概念

HStack 用于将其子视图按照水平方向排列,类似于将多个视图从左到右依次摆放。它是构建水平布局的常用组件。

1.2 基本创建

import SwiftUIstruct ContentView: View {var body: some View {HStack {Text("左")Text("中")Text("右")}.frame(width: 200,height: 100).background(.blue)}
}

在这个示例中,三个 Text 视图会在水平方向上依次排列,默认情况下它们之间会有一定的间距。
在这里插入图片描述

1.3 常用属性

1.3.1 spacing

spacing 属性用于设置子视图之间的间距。可以通过设置不同的值来调整间距大小。

import SwiftUIstruct ContentView: View {var body: some View {HStack(spacing: 30) {Text("左")Text("中")Text("右")}.frame(width: 200,height: 100).background(.blue)}
}

这里将子视图之间的间距设置为 30 点。
在这里插入图片描述

1.3.2 alignment

alignment 属性用于指定子视图在垂直方向上的对齐方式。常见的对齐方式有 .top(顶部对齐)、.center(居中对齐,默认值)、.bottom(底部对齐)等。

import SwiftUIstruct ContentView: View {var body: some View {HStack(alignment: .top,spacing:20){Text("左")Text("中").font(.largeTitle)Text("右")}.frame(width: 200,height: 200).background(.blue).border(Color.gray,width: 1)}
}

在这个例子中,两个 Text 视图会按照顶部对齐的方式排列。
在这里插入图片描述

二、VStack(垂直堆栈)

2.1 基本概念

VStackHStack 相对,它用于将其子视图按照垂直方向排列,即从顶部到底部依次摆放子视图。

2.2 基本创建

import SwiftUIstruct ContentView: View {var body: some View {VStack {Text("上")Text("中")Text("下")}.frame(width: 200,height: 200).background(.blue)}
}

此示例中,三个 Text 视图会在垂直方向上依次排列。
在这里插入图片描述

2.3 常用属性

2.3.1 spacing

HStack 一样,VStackspacing 属性用于设置子视图之间的垂直间距。

import SwiftUIstruct ContentView: View {var body: some View {VStack(spacing: 30) {Text("上")Text("中")Text("下")}.frame(width: 200,height: 200).background(.blue)}
}

这里将子视图之间的垂直间距设置为 30 点。
在这里插入图片描述

2.3.2 alignment

alignment 属性用于指定子视图在水平方向上的对齐方式。常见的对齐方式有 .leading(左对齐)、.center(居中对齐,默认值)、.trailing(右对齐)等。

import SwiftUIstruct ContentView: View {var body: some View {VStack(alignment: .leading,spacing: 30) {Text("上")Text("中").font(.largeTitle)Text("下")}.frame(width: 200,height: 200).background(.blue)}
}

在这个示例中,两个 Text 视图会按照左对齐的方式排列。
在这里插入图片描述

三、ZStack(深度堆栈)

3.1 基本概念

ZStack 用于将其子视图按照深度方向(即前后顺序)进行堆叠。子视图会按照添加的顺序依次堆叠,后添加的视图会覆盖在前添加的视图之上。

3.2 基本创建

import SwiftUIstruct ContentView: View {var body: some View {ZStack {Rectangle().foregroundColor(.blue).frame(width: 200, height: 200)Text("在上面")}}
}

在这个例子中,Text 视图会显示在 Rectangle 之上。
在这里插入图片描述

3.3 常用属性

3.3.1 alignment

alignment 属性用于指定子视图在 ZStack 中的对齐方式,它同时影响水平和垂直方向。常见的对齐方式有 .topLeading(左上角对齐)、.center(居中对齐,默认值)、.bottomTrailing(右下角对齐)等。

import SwiftUIstruct ContentView: View {var body: some View {ZStack(alignment: .topLeading) {Rectangle().foregroundColor(.blue).frame(width: 200, height: 200)Text("在左上角")}}
}

这里将 Text 视图和 Rectangle 按照左上角对齐的方式进行堆叠。
在这里插入图片描述

四、综合案例

案例将展示如何使用这些布局容器来创建一个简单的用户界面,其中包含文本、图像和按钮。我们将利用这些布局容器的常用属性来实现一个具有良好视觉层次结构的界面。

import SwiftUIstruct ProfileCardView: View {var body: some View {ZStack {// 背景颜色Color(.systemTeal).edgesIgnoringSafeArea(.all)VStack(spacing: 20) {// 头像和名称VStack {Image(systemName: "person.circle.fill").resizable().frame(width: 100, height: 100).foregroundColor(.white)Text("John Doe").font(.title).foregroundColor(.white)}// 个人信息VStack(alignment: .leading, spacing: 10) {HStack {Image(systemName: "envelope.fill").foregroundColor(.white)Text("john.doe@example.com").foregroundColor(.white)}HStack {Image(systemName: "phone.fill").foregroundColor(.white)Text("+1 (555) 555-5555").foregroundColor(.white)}HStack {Image(systemName: "location.fill").foregroundColor(.white)Text("San Francisco, CA").foregroundColor(.white)}}Spacer()// 操作按钮HStack(spacing: 40) {Button(action: {print("Follow tapped")}) {Text("Follow").fontWeight(.bold).padding().background(Color.white).foregroundColor(.blue).cornerRadius(10)}Button(action: {print("Message tapped")}) {Text("Message").fontWeight(.bold).padding().background(Color.white).foregroundColor(.blue).cornerRadius(10)}}}.padding()}}
}

代码说明

  • ZStack:用于创建背景层和内容层的叠加。背景颜色使用Color设置为 systemTeal,并通过edgesIgnoringSafeArea(.all)使背景颜色覆盖整个屏幕。
  • VStack:用于垂直排列头像、名称、个人信息和按钮。spacing 属性用于设置子视图之间的间距。
  • HStack:用于水平排列个人信息中的图标和文本,以及底部的操作按钮。spacing 属性用于设置子视图之间的间距。
  • Image Text:用于显示头像、名称和个人信息。通过 foregroundColor 设置颜色。
  • Button:用于创建可交互的按钮,包含一个简单的操作示例(打印消息)。按钮样式通过 padding、background、foregroundColor 和 cornerRadius 设置。

相关文章:

SwiftUI基础组件之HStack、VStack、ZStack详解

文章目录 引言一、HStack(水平堆栈)1.1 基本概念1.2 基本创建1.3 常用属性1.3.1 spacing1.3.2 alignment 二、VStack(垂直堆栈)2.1 基本概念2.2 基本创建2.3 常用属性2.3.1 spacing2.3.2 alignment 三、ZStack(深度堆栈…...

第2章 深入理解Thread构造函数

Thread的构造函数。 2.1 线程的命名 在构造一个Thread时可以为其命名。 2.1.1 线程的默认命名 下面构造函数中,并没有为线程命名。 Thread() Thread(Runnable target) Thread(ThreadGroup group, Runnable target)打开源码会看到 public Thread(Runnable targe…...

PLC扫描周期和工作原理

可编程逻辑控制器(PLC)的运行原理和扫描周期是其实现工业自动化的核心机制。以下从运行原理、扫描周期组成、关键特性及优化方向等方面进行详细阐述: 一、PLC运行原理 PLC采用**循环扫描(Cyclic Scan)**的工作模式&am…...

玩转Docker | 使用Docker部署本地自托管reference速查表工具

玩转Docker | 使用Docker部署本地自托管reference速查表工具 前言一、Reference介绍Reference简介主要特点二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署reference服务下载镜像创建容器检查容器状态检查服务端口安全设置四、访问reference应用五、测试与…...

MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 高级篇 part 2

第02章_MySQL的数据目录 1. MySQL8的主要目录结构 1.1 数据库文件的存放路径 MySQL数据库文件的存放路径:/var/lib/mysql/ MySQL服务器程序在启动时会到文件系统的某个目录下加载一些文件,之后在运行过程中产生的数据也都会存储到这个目录下的某些文件…...

跟着 Lua 5.1 官方参考文档学习 Lua (3)

文章目录 2.5 – Expressions2.5.1 – Arithmetic Operators2.5.2 – Relational Operators2.5.3 – Logical Operators2.5.4 – Concatenation2.5.5 – The Length Operator2.5.6 – Precedence2.5.7 – Table Constructors2.5.8 – Function Calls2.5.9 – Function Definiti…...

ORM框架详解:为什么不直接写SQL?

想象一下,你正在开发一个小型的在线书店应用。你需要存储书籍信息、用户数据和订单记录。作为一个初学者,你可能会想:“我已经学会了SQL,为什么还要使用ORM框架呢?直接写SQL语句不是更简单、更直接吗?” 如…...

【Server Components 解析:Next.js 的未来组件模型】

🛠️ Server Components 解析:Next.js 的未来组件模型 本文将用 3000 字 ,带你彻底掌握 React Server Components 的核心原理与实战技巧。无论你是刚接触 Next.js 的新手,还是想优化现有项目的老手,这里都有你需要的关…...

2025最新智能优化算法:改进型雪雁算法(Improved Snow Geese Algorithm, ISGA)求解23个经典函数测试集,MATLAB

一、改进型雪雁算法 雪雁算法(Snow Geese Algorithm,SGA)是2024年提出的一种新型元启发式算法,其灵感来源于雪雁的迁徙行为,特别是它们在迁徙过程中形成的独特“人字形”和“直线”飞行模式。该算法通过模拟雪雁的飞行…...

基于spring boot物流管理系统设计与实现(代码+数据库+LW)

摘 要 社会发展日新月异,用计算机应用实现数据管理功能已经算是很完善的了,但是随着移动互联网的到来,处理信息不再受制于地理位置的限制,处理信息及时高效,备受人们的喜爱。本次开发一套物流管理系统有管理员和用户…...

HTTP 和RESTful API 基础,答疑

一文搞懂RESTful API - bigsai - 博客园 1. API 路径 开头必须 /,表示绝对路径,不支持 . 或 ..(相对路径)。API 结尾 / 通常不需要,但部分框架会自动处理 / → 无 /。 ✅ 推荐 GET /api/v1/products # 资源集合…...

【数据挖掘】深度挖掘

【数据挖掘】深度挖掘 目录:1. 减少样本集的数量知识点示例 2. 对噪声比集剪枝知识点示例建立局部树代码示例(使用 Python 和 scikit - learn 库构建局部决策树)代码解释注意事项 最大超平面定义原理求解方法代码示例(使用 Python…...

OpenGL(2)基于Qt做OpenGL开发

文章目录 一、基于Qt做OpenGL开发1、环境准备2、创建OpenGL窗口3、绘制基本图形 一、基于Qt做OpenGL开发 1、环境准备 确保你已经安装了 Qt 开发环境(包含 Qt Creator),并且支持 OpenGL 开发。在创建 Qt 项目时,选择 “Qt Widget…...

使用JWT实现微服务鉴权

目录 一、微服务鉴权 1、思路分析 2、系统微服务签发token 3、网关过滤器验证token 4、测试鉴权功能 前言: 随着微服务架构的广泛应用,服务间的鉴权与安全通信成为系统设计的核心挑战之一。传统的集中式会话管理在分布式场景下面临性能瓶颈和扩展性…...

高并发内存池项目介绍

💓博主CSDN主页:Am心若依旧409-CSDN博客💓 ⏩专栏分类:项目记录_⏪ 🚚代码仓库:青酒余成 🚚   🌹关注我🫵带你学习C   🔝🔝 1.前言 在经历一年多左右的时间…...

PHP会务会议系统小程序源码

📅 会务会议系统 一款基于ThinkPHPUniapp框架,精心雕琢的会议管理微信小程序,专为各类高端会议场景量身打造。它犹如一把开启智慧殿堂的金钥匙,为会议流程优化、开支精细化管理、数量精准控制、标准严格设定以及供应商严格筛选等…...

Java中的常用类 --String

学习目标 掌握String常用方法掌握StringBuilder、StringBuffer了解正则 1.String ● String是JDK中提前定义好的类型 其所在的包是java.lang ,String翻译过来表示字符串类型,也就是说String类中已经提前定义好了很多方法都是用来处理字符串的,所以Str…...

PWM(脉宽调制)技术详解:从基础到应用实践示例

PWM(脉宽调制)技术详解:从基础到应用实践示例 目录 PWM(脉宽调制)技术详解:从基础到应用实践示例学前思考:一、PWM概述二、PWM的基本原理三、PWM的应用场景四、PWM的硬件配置与使用五、PWM的编程…...

Hutool - DB 连接池配置集成

在实际开发中,尤其是在高并发场景下,使用连接池来管理数据库连接是非常必要的,它可以显著提高数据库操作的性能和效率。Hutool - DB 支持集成多种常见的连接池,如 HikariCP、Druid 等。下面分别介绍如何将这两种连接池集成到 Huto…...

激光工控机在自动化生产线中有什么关键作用?

激光工控机作为自动化生产线的核心设备,通过高精度控制、快速响应和智能化集成,在提升效率、保障质量、实现柔性制造等方面发挥着不可替代的作用。以下是其关键作用的具体分析: 一、实现高效连续生产: 1.高速加工能力&#xff1…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息&#xff0…...

数据结构:泰勒展开式:霍纳法则(Horner‘s Rule)

目录 🔍 若用递归计算每一项,会发生什么? Horners Rule(霍纳法则) 第一步:我们从最原始的泰勒公式出发 第二步:从形式上重新观察展开式 🌟 第三步:引出霍纳法则&…...

python打卡第47天

昨天代码中注意力热图的部分顺移至今天 知识点回顾: 热力图 作业:对比不同卷积层热图可视化的结果 def visualize_attention_map(model, test_loader, device, class_names, num_samples3):"""可视化模型的注意力热力图,展示模…...

【PX4飞控】mavros gps相关话题分析,经纬度海拔获取方法,卫星数锁定状态获取方法

使用 ROS1-Noetic 和 mavros v1.20.1, 携带经纬度海拔的话题主要有三个: /mavros/global_position/raw/fix/mavros/gpsstatus/gps1/raw/mavros/global_position/global 查看 mavros 源码,来分析他们的发布过程。发现前两个话题都对应了同一…...

用js实现常见排序算法

以下是几种常见排序算法的 JS实现,包括选择排序、冒泡排序、插入排序、快速排序和归并排序,以及每种算法的特点和复杂度分析 1. 选择排序(Selection Sort) 核心思想:每次从未排序部分选择最小元素,与未排…...

LangChain + LangSmith + DeepSeek 入门实战:构建代码生成助手

本文基于 Jupyter Notebook 实践代码,结合 LangChain、LangSmith 和 DeepSeek 大模型,手把手演示如何构建一个代码生成助手,并实现全流程追踪与优化。 一、环境准备与配置 1. 安装依赖 pip install langchain langchain_openai2. 设置环境变…...

暴雨新专利解决服务器噪音与性能悖论

6月1日,我国首部数据中心绿色化评价方面国家标准《绿色数据中心评价》正式实施,为我国数据中心的绿色低碳建设提供了明确指引。《评价》首次将噪音控制纳入国家级绿色评价体系,要求从设计隔声结构到运维定期监测实现闭环管控,加速…...

智能照明系统:具备认知能力的“光神经网络”

智能照明系统是物联网技术与传统照明深度融合的产物,其本质是通过感知环境、解析需求、自主决策的闭环控制,重构光与人、空间、环境的关系。这一系统由智能光源、多维传感器、边缘计算单元及云端管理平台构成,形成具备认知能力的“光神经网络…...