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

SwiftUI学习笔记3-布局和样式

本课程将探索三种基本的堆栈它们分别用于水平排列视图、垂直排列视图以及将视图分层堆叠。学习内容汇总使用类型推断减少代码使用边框调试布局问题使用框架调整元素大小使用三种类型的堆栈——VStack、HStack和ZStack——创建复杂界面使用间距控制栈中内容的排列使用分页标签视图在视图之间导航资源库中的自定义颜色集如果字符串长到要换行可以在Text下面用multilineTextAlignmnent(.)来指定换行方式Text(现在你可以走了现在你可以走了现在你可以走了).multilineTextAlignment(.center)中间对齐.multilineTextAlignment(.leading)左对齐**.multilineTextAlignment(.trailing)**右对齐添加边框使用.border(.black, width: 1.5)通过使用形状和 SF Symbol 添加图形来完成欢迎页面。首先添加一个形状。添加圆角矩形RoundedRectangle(cornerRadius: 30)RoundedRectangle(cornerRadius: 30) .frame(width: 150, height: 150) .foregroundStyle(.tint)//.tint代表应用的强调色 //默认扩充整个空间因为无理想大小Text(欢迎您来) .font(.title)//突出显示,这里的Font可以不写系统会自动推断为Font .fontWeight(.semibold) .fontWidth(.compressed) .padding(.top)//在添加边框之前添加内边距,将填充限制在顶部.top底部.bottom 右边.trailing 左边.leading // .padding(.bottom)ZStack用于将视图一个叠一个地排列。放大系统图标移除边框看来边框是为了让人知道现在在写什么东西的...创建功能页面锁定某一页面,这个小图钉Spacer()的效果从左到右在栈的末尾添加一个 Spacer。这将使卡片的其他内容移至前沿并使卡片占据整个屏幕宽度。Frame(width: 50)通过frame使图标占据相同宽度FeatureCardimport SwiftUI struct FeatureCard: View { let iconName: String let descprition: String var body: some View { HStack { Image(systemName: iconName) .font(.largeTitle) .frame(width: 50)//通过frame使图标占据相同宽度 .padding(.trailing, 10)//距离右边框的内边距为10调大就留白越多 Text(descprition)//提示说明参数 Spacer() } .padding()//在背景修饰符之前留出一些空间 .background(.tint, in: RoundedRectangle(cornerRadius: 12)) .foregroundStyle(.white) } } #Preview {//修复这里的实例 FeatureCard(iconName: person.2.crop.square.stack.fill, descprition: A multiline description about a feature a paired with the image on the left.) } //需要创建实例因为结构体没有实例。FeaturedPageimport SwiftUI struct FeaturesPage: View { var body: some View { VStack { Text(Features) .font(.title) .fontWeight(.semibold) .padding(.bottom) FeatureCard(iconName: person.2.crop.square.stack.fill, descprition: A multiline description about a feature paired with the image on the left.) FeatureCard(iconName: quote.bubble.fill, descprition: Short summary)//一张更简洁的卡片创建FeatureCard结构体实例 } .padding() } } #Preview { FeaturesPage() }使用TabView组合屏幕:让用户在页面之间滑动Tab包含多个子视图但不会一次性显示全部默认的TabView会在屏幕底部显示标签页点击标签页就会显示对应视图。可以使用.tabViewStyle来修改.page标签允许左右滑动以切换视图// // ContentView.swift // OnboardingFlow // // Created by sakiko on 2026/4/22. // import SwiftUI struct ContentView: View { var body: some View { TabView {//TabView,让用户在页面之间滑动 WelcomePage() FeaturesPage() } .tabViewStyle(.page)//就是这 } } #Preview { ContentView() }在资源库中定义颜色左侧的Assets检查器choosing View Inspectors Show Inspector.这里选择none相同颜色应用于浅色和深色外观。然后在右边创建颜色声明一个用于渐变颜色的全局属性// ContentView.swift // OnboardingFlow // // Created by sakiko on 2026/4/22. // import SwiftUI //声明一个用于渐变颜色的全局属性 let gradientColors: [Color] [ .gradientTop, .gradientBottom ]//这是全局属性在所有代码里可见然后把渐变色应用到背景里struct ContentView: View { var body: some View { TabView {//TabView,让用户在页面之间滑动 WelcomePage() FeaturesPage() } .background(Gradient(colors: gradientColors)) .tabViewStyle(.page) } }这是ContentView里在ContentView中控制其他视图struct ContentView: View { var body: some View { TabView {//TabView,让用户在页面之间滑动 WelcomePage() FeaturesPage() } .background(Gradient(colors: gradientColors)) .tabViewStyle(.page) .foregroundStyle(.white)//所有视图都适用(WelcomPage和FeaturesPage) //通过上面这一行 } }修改系统色(AccentColor)添加一个有透明度的矩形覆盖在背景上实现以下操作创建一张带圆角的背景卡片创建一个高度无限的面板控制透明度忽略上下布局// FeaturesPage.swift // OnboardingFlow // // Created by sakiko on 2026/4/23. // import SwiftUI struct FeaturesPage: View { var body: some View { VStack(spacing: 30) {//通过设置spacing属性,控制VStack 中每个子视图之间的垂直间距 Text(Features) .font(.title) .fontWeight(.semibold) .padding(.bottom) .foregroundStyle(.black) .padding(.top, 100)//为了避免紧贴还是得有一些内边距 FeatureCard(iconName: person.2.crop.square.stack.fill, descprition: A multiline description about a feature paired with the image on the left.) FeatureCard(iconName: quote.bubble.fill, descprition: Short summary)//一张更简洁的卡片创建FeatureCard结构体实例 Spacer()//在最下面使用Spacer()来将内容推到顶部 } .padding() .background { RoundedRectangle(cornerRadius: 12) .foregroundStyle(.tint)//创建一张带圆角的背景卡片 .opacity(0.2)//控制透明度 }.ignoresSafeArea()//忽略上下布局以后再说 } } #Preview { FeaturesPage() .frame(maxHeight: .infinity)//创建一个高度无限的面板 .background(Gradient(colors: gradientColors)) .foregroundStyle(.white) }最终效果大概就是这样练习1.调整应用的设计。运用你学到的所有技巧如内边距、间距和栈布局。2.为引导流程添加第三页。3.更改应用的主题色。更新两种渐变颜色或添加第三种。尝试调整不同的不透明度和亮度使功能卡片彼此区分。import SwiftUI struct Page_New: View { var body: some View { VStack(){ Text(这是第三页) .fontWeight(.semibold) .font(.title) .foregroundStyle(.black) .shadow(radius: 5) .padding(.top, 50) .frame(maxWidth: .infinity, alignment: .leading) .padding(.bottom, 25) //为了避免紧贴还是得有一些内边距 FeatureCard(iconName: person.2.crop.square.stack.fill, descprition: 这里是第三页感谢您的观看。现在你可以走了886) FeatureCard(iconName: quote.bubble.fill, descprition: 想吐槽我但是没有机会) Spacer() } .padding() .background { RoundedRectangle(cornerRadius: 12) .foregroundStyle(.blue)//创建一张带圆角的背景卡片 .opacity(0.3)//控制透明度 }.ignoresSafeArea()//忽略上下布局以后再说 } } #Preview { Page_New()//适用ContentView设定的背景色 .frame(maxHeight: .infinity) .frame(maxWidth: .infinity) .background(Gradient(colors: gradientColors)) .foregroundStyle(.white) }练习的效果

相关文章:

SwiftUI学习笔记3-布局和样式

本课程将探索三种基本的堆栈,它们分别用于水平排列视图、垂直排列视图以及将视图分层堆叠。学习内容汇总:使用类型推断减少代码使用边框调试布局问题使用框架调整元素大小使用三种类型的堆栈—— VStack 、 HStack 和 ZStack ——创建复杂界面使用间距控…...

别再傻傻分不清了!一文搞懂UART、RS232、RS485和RS-422到底怎么选(附选型指南)

串口通信协议终极选型指南:UART、RS232、RS485与RS-422深度解析 在工业自动化、物联网设备开发或嵌入式系统设计中,工程师们经常面临一个基础却关键的选择:如何为设备间的数据通信选择合适的串口协议?UART、RS232、RS485和RS-422这…...

你的 Tree Shaking 可能是“假的”?

你以为你用了 ES Module,就自动开启 Tree Shaking 了? 很遗憾,大多数情况下——并没有真正生效。很多项目打包后: 明明没用的代码还在bundle 体积异常膨胀优化了半天效果不明显 问题很可能出在一个你没注意的地方: pac…...

Windows音频路由终极指南:如何用Audio Router实现多设备音频分发

Windows音频路由终极指南:如何用Audio Router实现多设备音频分发 【免费下载链接】audio-router Routes audio from programs to different audio devices. 项目地址: https://gitcode.com/gh_mirrors/au/audio-router 你是否厌倦了Windows系统中所有应用音频…...

终极文档下载解决方案:告别繁琐流程,轻松获取任何可见文档

终极文档下载解决方案:告别繁琐流程,轻松获取任何可见文档 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,…...

论文AI率从50%降到10%!4个实用指令+3个技巧轻松过审

写完论文最闹心的是什么?重复率高已经够头疼,现在不少高校还加了AIGC检测,辛辛苦苦写的内容因为AI痕迹超标被打回,熬了好几个大夜改出来还是过不了,这种糟心的经历相信很多人都有过。 别着急!我前后花了一…...

AI工程化设计(五)Agent设计范式(2)Plan-and-Execute

Plan-and-Execute:比 ReAct 更“有全局观”的 Agent 设计范式一、介绍1. 什么是 Plan-and-ExecutePlan-and-Execute 是另一类非常重要的 Agent 设计范式,核心思想可以概括为一句话:先把任务想清楚、拆清楚,再按步骤执行。也就是把…...

iFakeLocation:跨平台iOS虚拟定位技术深度解析与实战应用

iFakeLocation:跨平台iOS虚拟定位技术深度解析与实战应用 【免费下载链接】iFakeLocation Simulate locations on iOS devices on Windows, Mac and Ubuntu. 项目地址: https://gitcode.com/gh_mirrors/if/iFakeLocation iFakeLocation是一款创新的跨平台iOS…...

Windows Cleaner:当C盘爆红时,你的Windows系统救星来了!

Windows Cleaner:当C盘爆红时,你的Windows系统救星来了! 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 还在为电脑越来越慢而…...

生产PVC喷墨白卡工厂推荐

在当今的商业社会中,PVC喷墨白卡的应用越来越广泛,无论是在广告宣传、身份识别还是产品标签等领域,都能看到它的身影。然而,市场上PVC喷墨白卡的质量参差不齐,选择一家靠谱的生产工厂至关重要。今天,就为大…...

Layerdivider:让每张图片都能像洋葱一样层层剥开的魔法工具

Layerdivider:让每张图片都能像洋葱一样层层剥开的魔法工具 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 想象一下,你有一张美丽…...

生产覆膜白卡公司推荐

在当今的商业社会中,各类卡片的使用场景愈发广泛,覆膜白卡作为其中一种重要的卡片类型,其质量和适用性备受关注。如果你正在寻找一家可靠的覆膜白卡生产公司,那么广州杰众智能科技有限公司绝对值得考虑。一、公司实力与信誉有保障…...

游戏分服总跨大区:如何用IP精准定位服务避免跨运营商分配?

一、一个常见但少被量化的痛点 某款MOBA游戏在大促期间收到大量玩家投诉:“匹配后延迟从20ms跳到120ms,角色卡顿”。排查发现,问题根源在于IP定位数据将部分南方电信用户错误判定为北方联通节点,导致跨运营商、跨大区分配。这种错…...

告别马赛克:实测用CodeFormer给AI生成的脸部图片‘补妆’与高清化

用CodeFormer为AI生成人脸打造电影级精修方案 当你在Stable Diffusion中生成了一张构图完美但面部细节模糊的肖像,或是在Midjourney里得到了五官轻微扭曲的虚拟角色时,那种"差一口气"的遗憾感,每个AI绘画玩家都深有体会。传统的高清…...

灾难恢复开发:高薪冷门赛道

在数字化浪潮席卷全球的今天,企业运营的神经中枢已全面接入信息系统。然而,数据中心的火灾、突发的网络攻击、自然灾害的侵袭,乃至一次人为的误操作,都可能让承载核心业务的系统瞬间瘫痪。对于大多数软件工程师而言,日…...

模型审计师崛起:AI可解释性需求

从黑盒到白盒,测试专业的新疆域在人工智能技术以前所未有的深度渗透到软件研发全流程的今天,传统的软件测试边界正在被重新定义。过去,测试工程师的核心职责是验证代码逻辑、保障功能正确性与系统稳定性。然而,随着AI模型从辅助工…...

开发者数字游民:全球薪酬套利——软件测试工程师的专业突围之路

在数字浪潮与人工智能技术的双重推动下,一种全新的职业形态正在全球范围内加速崛起。他们不再被束缚于北上广深的格子间,也不必忍受每日漫长的通勤。他们凭借一台笔记本电脑,就可以在苍山洱海的民宿里、巴厘岛的泳池边,或任何能接…...

全栈测试架构师养成路线图:构建从技术纵深到业务全景的复合能力体系

在数字化转型与敏捷交付成为主流的今天,软件测试的角色正经历着深刻的范式转移。传统的测试执行者已难以满足高质量、高效率交付的需求,市场正呼唤着能够贯通前后端、横跨技术与业务的战略性人才——全栈测试架构师。这一角色不仅是测试专家,…...

Android应用冷冻神器:雹(Hail)让你的手机焕然一新的终极指南

Android应用冷冻神器:雹(Hail)让你的手机焕然一新的终极指南 【免费下载链接】Hail Disable / Hide / Suspend / Uninstall Android apps without root. 项目地址: https://gitcode.com/gh_mirrors/ha/Hail 你是否曾经为手机越来越慢、…...

Windows程序完全隐藏运行:专业级后台进程管理终极解决方案

Windows程序完全隐藏运行:专业级后台进程管理终极解决方案 【免费下载链接】RunHiddenConsole Hide console window for windows programs 项目地址: https://gitcode.com/gh_mirrors/ru/RunHiddenConsole 在Windows系统自动化工作中,你是否经常被…...

别再死记硬背了!用Python+Matplotlib手把手仿真四种脉冲雷达信号(附完整代码)

PythonMatplotlib实战:四种脉冲雷达信号仿真与可视化解析 雷达信号处理是电子工程领域的核心技能之一,但传统教材中复杂的数学公式常常让初学者望而生畏。本文将用Python代码可视化分析的方式,带你亲手构建四种典型脉冲雷达信号模型&#xff…...

PIC单片机触摸按键实战:从零手搓代码到调用Microchip官方库(PIC16F1937为例)

PIC单片机电容触摸按键开发实战:从寄存器配置到Microchip MLA库应用 在智能家居控制面板、工业HMI界面等嵌入式应用中,电容触摸按键因其无机械磨损、防水防尘的特性逐渐取代传统机械按键。PIC16F1937作为Microchip旗下集成电容传感模块(CPS)的中端8位单片…...

Azure机器学习在游戏AI中的应用与优化实践

1. 项目背景与获奖概况2016年微软Azure机器学习大赛的获奖作品是一个将机器学习与游戏设计完美结合的创新项目。这个项目之所以能从众多参赛作品中脱颖而出,关键在于它巧妙地解决了传统游戏AI的局限性问题——通过云端机器学习服务,实现了真正具有学习进…...

别再手动画湖了!用GEE和Sentinel-2数据,5分钟自动提取武汉东湖最新水域范围

5分钟自动化提取水域范围:基于GEE与Sentinel-2的高效水体识别方案 清晨的湖面泛着微光,水域边界随着季节更替悄然变化。传统的手动勾画方法不仅耗时费力,还难以捕捉这种动态变化。现在,借助Google Earth Engine(GEE&am…...

C++26反射元编程安全性实战:5大高危陷阱识别、3层编译期校验、1套可审计API设计规范

第一章:C26反射元编程安全性全景概览C26 正式引入基于 std::reflexpr 的静态反射(Static Reflection)核心设施,标志着元编程范式从模板元编程(TMP)和 constexpr 编程迈向可验证、可审计的声明式元操作阶段。…...

告别BlueZ 4.x时代:为什么你的蓝牙音响连不上?详解BlueZ 5与PulseAudio的协作原理

蓝牙音频技术演进:从BlueZ 4.x到现代音频栈的架构变革 在嵌入式Linux开发中,蓝牙音频连接问题一直是个令人头疼的"玄学"问题。许多开发者都有过这样的经历:明明昨天还能正常工作的蓝牙音响,今天突然就无法连接了&#x…...

5步实现电视盒子改造:从安卓到高性能Linux服务器的完整指南

5步实现电视盒子改造:从安卓到高性能Linux服务器的完整指南 【免费下载链接】amlogic-s9xxx-armbian Supports running Armbian on Amlogic, Allwinner, and Rockchip devices. Support a311d, s922x, s905x3, s905x2, s912, s905d, s905x, s905w, s905, s905l, rk3…...

白帽子必备修养!Web 安全入门级笔记,带你彻底搞懂什么是 Web 安全!

前言 Web安全是什么?不妨先说一说Web是什么吧?我觉得这个对于整个CSDN的小伙伴儿来说~~好嘛,你这是“关公面前耍大刀,鲁班门前舞斧子”,活得腻歪了不是,再啰嗦可就取关了。 我主要…...

一键下载七大视频网站:Video-Downloader让离线观看变得轻松简单

一键下载七大视频网站:Video-Downloader让离线观看变得轻松简单 【免费下载链接】Video-Downloader 下载youku,letv,sohu,tudou,bilibili,acfun,iqiyi等网站分段视频文件,提供mac&win独立App。 项目地址: https://gitcode.com/gh_mirrors/vi/Video…...

分光计实验:从原理到实践,手把手教你测量三棱镜折射率

1. 分光计实验入门:为什么测量三棱镜折射率这么重要? 第一次接触分光计实验时,我和大多数同学一样满头雾水——这个长得像显微镜的金属仪器,怎么会有二十多个调节旋钮?直到亲手完成三棱镜折射率测量,才明白…...