当前位置: 首页 > 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…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...