在这里插入图片描述

🍸 Liquid Glass 登场:界面设计焕然一新

WWDC25 可谓惊喜连连,其中最引人瞩目的变革之一,莫过于苹果推出的全新跨平台设计语言 —— Liquid Glass(液态玻璃)。这一设计风格涵盖了从按钮到导航栏,再到本篇的主角——标签页(Tabs)

在这里插入图片描述

在 Liquid Glass 中,标签页不仅视觉上焕然一新,交互也有了脱胎换骨的变化。本文将带你一探 SwiftUI 中关于新标签页的 API 和用法,助你 快人一步、技高一筹

在本篇博文中,您将学到如下内容:

    • 🍸 Liquid Glass 登场:界面设计焕然一新
    • 🧭 Tab 的新写法:表里如一,图文并茂
    • 📌 编程式控制 tab:与状态同步,持久不灭
    • 🔍 使用 Tab 角色:让搜索独树一帜
    • 🧱 跨平台适配:Sidebar 自动切换
    • 🧩 Tab 附加视图(Accessory):不止于导航
    • 🌀 滚动时最小化标签栏:内容为王,导航让位
    • 📌 总结:Tab 的新纪元
    • 🎉 总结

闲言少叙,让我们马上开始液态玻璃 TabView 大冒险吧!
Let’s go!!!😉


🧭 Tab 的新写法:表里如一,图文并茂

为了能够充分利用全新 TabView 惊鸿艳影般的外观,我们需要使用 Tab 视图来代替之前的 tabItem 修改器方法:

struct ContentView: View {var body: some View {TabView {Tab("feed", systemImage: "list.star") {// 内容区域}Tab("settings", systemImage: "gear") {// 内容区域}}}
}

🔍 解析:

  • 我们依然使用 TabView,但每个 tab 不再直接放在 TabView 内部;
  • 每个子视图包裹在新的 Tab 类型中,图标采用 SF Symbols,图文并茂,美观实用
  • 如此写法符合 Liquid Glass 风格,可享受其视觉特性与交互增强。

📌 编程式控制 tab:与状态同步,持久不灭

利用 @SceneStorage 动态属性,我们可以将 selectedTabIndex 放在 App 关联的持久存储中,让每次应用重启都能“刻骨铭心”:

@SceneStorage("selectedTab") private var selectedTabIndex = 0TabView(selection: $selectedTabIndex) {Tab("feed", systemImage: "list.star", value: 0) {// Feed 内容}Tab("settings", systemImage: "gear", value: 1) {// 设置页内容}
}

🎓 扩展知识:

  • @SceneStorage 可在应用关闭后保留状态;
  • TabView(selection:) 搭配使用,当用户返回应用时可自动恢复上次选中的标签;
  • 每个 Tab 绑定唯一 value 值,避免冲突。

🔍 使用 Tab 角色:让搜索独树一帜

为了进一步精雕细琢我们 Tab 的习性,宝子们可以让特别的 Tab 成为特别的角色,正所谓:“特别的爱给特别的你❤️”:

Tab("search", systemImage: "magnifyingglass", value: 1, role: .search) {// 搜索内容
}

比如在上面的代码中,我们就特别标记出 search 用途的标签:

在这里插入图片描述

📚 说明:

  • role 属性用于标记该标签的用途;
  • 当前唯一支持的角色是 .search,系统将搜索标签在 UI 中隔离处理(如在 iOS 中会单独显示);
  • 在未来 iOS 版本中,可能加入更多角色,如 .profile.notifications 等等。

🧱 跨平台适配:Sidebar 自动切换

为了能够让 iOS 中的 TabView 匹配 iPadOS / macOS 里的 sidebar 外观,我们可以用 sidebarAdaptable 样式来向系统做出特殊说明:

TabView {Tab("feed", systemImage: "list.star", value: 0) {}Tab("settings", systemImage: "gear", value: 2) {}
}
.tabViewStyle(.sidebarAdaptable)

在 Xcode 26 中的预览结果如下图所示:

在这里插入图片描述

💡 解读:

  • .sidebarAdaptable 让同一段代码在 iPhone 上呈现为底部标签页;
  • 而在 iPad 与 macOS 上则自动转为 Sidebar,一举多得,省心省力
  • 是打造“响应式 UI”的必备良药。

🧩 Tab 附加视图(Accessory):不止于导航

我们还可以为特定 Tab 附加辅助视图(Accessory):

TabView {...}.tabViewBottomAccessory {if selectedTabIndex == 1 {HStack {TextField("输入搜索文本", text: $searchText)Button("搜索", systemImage: "sparkle.magnifyingglass", action: {print("搜索中...")})}.padding(.horizontal)}}

比如,在上面的代码中当用户进入搜索 Tab 时,我们在 TabView 工具栏上方增加一个搜索功能框:

在这里插入图片描述

🎼 应用场景:

  • Apple Music 使用 accessory view 来显示当前播放状态并提供暂停/跳过按钮;
  • 可用于显示网络状态、下载进度、通知中心入口等全局功能;
  • 全天可见、随时响应,用户体验 稳如泰山

🌀 滚动时最小化标签栏:内容为王,导航让位

聊了前面那么多,我还是觉得 iOS 26 为 TabView 增加的最有趣且最实用的功能就是让用户在滚动时自动“精简”下方 TabBar 的布局:

.tabBarMinimizeBehavior(.onScrollDown)

完整示例在此:

TabView {Tab("feed", systemImage: "list.star", value: 0) {}Tab("settings", systemImage: "gear", value: 2) {}
}
.tabViewStyle(.sidebarAdaptable)
.tabBarMinimizeBehavior(.onScrollDown)
.tabViewBottomAccessory {Button("Do Action") {}
}

从 Xcode 26 预览的显示中可以看到,当用户向下滚动时 TabBar 会自动收缩,而向上滚动时 TabBar 又会“恢复如常”:

在这里插入图片描述

🚀 扩展说明:

  • tabBarMinimizeBehavior 可控制标签栏在内容滚动时是否隐藏;
  • .onScrollDown 表示向下滚动时自动收起 tab,释放更多空间;
  • 非常适用于资讯类、社交类、阅读类的应用。

📌 总结:Tab 的新纪元

特性说明
新 Tab API使用 Tab("title", systemImage:, value:)
场景存储@SceneStorage 保存选中状态
Tab Role当前支持 .search
sidebarAdaptableiPad/macOS 自动变身为 Sidebar
tabViewBottomAccessory全局操作附加视图
tabBarMinimizeBehavior滚动时隐藏标签栏,内容更聚焦

🎉 总结

在本篇博文中,我们探索了 Liquid Glass 为 tab 导航带来的焕新体验。新的视觉、行为与结构为 SwiftUI 注入新活力,也为开发者带来更多“独步天下,登峰造极”的内功修为。

👋 感谢观赏!再会啦!😎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/87758.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/87758.shtml
英文地址,请注明出处:http://en.pswp.cn/web/87758.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PDF处理控件Spire.PDF教程:在Java中读取PDF,提取文本、图片和表格

在数据驱动的现代开发中,高效处理 PDF 文档已成为 Java 开发者不可或缺的核心能力。无论是处理各类发票扫描件、业务分析报告,还是包含丰富图表的技术文档,掌握 Java 版的 PDF 解析技术都将大幅提升数据处理效率,充分释放文档中的…

跨平台游戏引擎 Axmol-2.7.0 发布

Axmol 2.7.0 版本是一个以错误修复和功能改进为主的次要LTS长期支持版本 🙏感谢所有贡献者及财务赞助者:scorewarrior、peterkharitonov、duong、thienphuoc、bingsoo、asnagni、paulocoutinhox 重大变更 Android Studio 最低版本要求升级至 2025.1.1…

XML 笔记

<image src"hue.gif" width"100" height"auto" align"left"/> <br/> 换行 在 XML 中&#xff0c;<![CDATA[ 和 ]]> 用于定义一个 CDATA 节&#xff08;Character Data Section&#xff09;。CDATA 节是用于将一段…

Python实现优雅的目录结构打印工具

Python实现优雅的目录结构打印工具 在软件开发、系统管理和日常工作中&#xff0c;我们经常需要查看和分析目录结构。 工具功能概述 这个DirectoryPrinter类提供了以下功能&#xff1a; 递归打印目录结构可配置是否显示隐藏文件可设置最大递归深度自定义缩进和文件/文件夹符…

【Python】文件打开:with open具体解析

示例 # 使用 with 语句打开文件并读取内容 with open(pi.txt, r) as file_object:contents file_object.read()print(contents) # 文件在代码块结束后自动关闭with 解析 with 是 Python 中的上下文管理器语法&#xff0c;用于确保某个操作完成后自动执行清理操作。它常用于文…

Acrel-1000系列分布式光伏监控系统在湖北荆门一马光彩大市场屋顶光伏发电项目中应用

摘 要&#xff1a;分布式光伏发电能够对日益严重的环境压力起到有效缓解作用,在当前对环境保护需求越来越大情况下,发电行业在发展中不但要提升发电效率,同时也需要降低成本。分布式光伏发电主要是利用风能和太阳能等可再生清洁能源进行发电,对于空气质量具有改善效果,和传统发…

CentOS-6与CentOS-7的网络配置IP设置方式对比 笔记250706

CentOS-6与CentOS-7的网络配置IP设置方式对比 笔记250706 1️⃣ 参考 1 CentOS-6 与 CentOS-7 的网络配置IP设置方式对比 CentOS 6 和 CentOS 7 在网络配置上存在显著差异&#xff0c;主要体现在配置文件结构、管理工具、服务机制和命令集等方面。以下是两者的核心对比&#x…

【网络系列】HTTP 429 状态码

博客目录 HTTP 429 状态码的定义与背景产生 429 错误的常见场景1. API 速率限制触发2. 网络爬虫行为被检测3. 分布式拒绝服务(DDoS)防护4. 用户/IP 特定限流策略5. 应用程序逻辑错误 深入解读 429 响应的关键头部信息Retry-After 头部X-RateLimit 系列头部RateLimit 标准化头部…

C++无锁数据结构:CAS(Compare-and-Swap)

在高并发场景下&#xff0c;传统锁机制带来的线程阻塞和上下文切换开销成为性能瓶颈。无锁数据结构通过原子操作实现线程安全&#xff0c;避免了锁的使用&#xff0c;成为高性能系统的关键技术。本文将深入探讨C中基于CAS&#xff08;Compare-and-Swap&#xff09;的无锁数据结…

【数字图像处理】

数字图像处理 绪论1. 数字图像处理基本概念2. 数字图像处理系统的组成3. 数字图像处理技术研究的内容4. 数字图像处理技术的应用领域5. 图像处理技术涉及的学科领域 图像处理基础1. 电磁波谱与可见光谱2. 人眼的亮度视觉特性3. 图像的表示4. 空间分辨率和灰度级分辨率5. 像素间…

linux chrome浏览器打不开了

报错信息 通过terminal执行google-chrome [12714:12714:0706/223620.723519:ERROR:chrome/browser/process_singleton_posix.cc:358] The profile appears to be in use by another Google Chrome process (54949) on another computer (192.168.0.17). Chrome has locked t…

Python:模块

一、Python模块基础概念 1. 什么是Python模块&#xff1f; 在 Python 中&#xff0c;模块&#xff08;Module&#xff09; 是一个包含 Python 代码的文件&#xff08;扩展名为 .py&#xff09;&#xff0c;用于组织代码、实现功能复用和命名空间管理。模块可以包含变量、函数…

C 语言指针与作用域详解

一、指针基础概念 &#xff08;一&#xff09;指针的本质 指针是 C 语言中一个重要的概念&#xff0c;其本质是内存地址。在计算机内存中&#xff0c;每个字节都有唯一的编号&#xff0c;这个编号就是我们所说的内存地址&#xff0c;而指针变量就是用于存储这些内存地址的变量…

解锁阿里云ACK:开启Kubernetes容器化应用新时代

引言&#xff1a;云原生时代下的 ACK 在当今数字化飞速发展的时代&#xff0c;云原生技术正以前所未有的速度改变着软件开发和部署的格局。随着企业对应用敏捷性、弹性扩展以及成本优化的需求日益增长&#xff0c;云原生已成为众多企业实现数字化转型的关键路径。在云原生的技…

【C++基础】内存管理四重奏:malloc/free vs new/delete - 面试高频考点与真题解析

在 C/C 编程中&#xff0c;内存管理是核心基础技能&#xff0c;而malloc/free和new/delete作为两套内存分配释放机制&#xff0c;是面试中高频出现的考点。 一、内存管理的 "双生花"&#xff1a;基础概念解析 1.1 malloc/free&#xff1a;C 语言的内存管家 malloc全…

Dify+Ollama+QwQ:3步本地部署,开启AI搜索新篇章

如何来评价本地化部署的价值与优势分析&#xff1a; 成本优化与隐私保障 自定义搜索插件&#xff0c;告别信息过载 一键生成报告、分析&#xff0c;效率翻倍&#xff01; 接下来我们就尝试跟随来部署本地的价值所在! 1&#xff1a;安装Ollama & 部署QwQ模型 1.1 安装O…

FAISS 简介及其与 GPT 的对接(RAG)

什么是 FAISS&#xff1f; FAISS (Facebook AI Similarity Search) 是 Facebook AI 团队开发的一个高效的相似性搜索和密集向量聚类的库。它主要用于&#xff1a; 大规模向量相似性搜索高维向量最近邻检索向量聚类 https://github.com/facebookresearch/faissFAISS 特别适合处理…

【Apache Doris 深度实战:从 MPP 架构到实时分析,解锁三大数据模型的性能优化秘籍】

一、安装部署 安装教程&#xff1a;GitHub地址 Doc文档&#xff1a;Apache Doris 简介 - Apache Doris 二、功能及作用 Apache Doris 是一款基于MPP 架构的高性能、实时分析型数据库。它以高效、简单和统一的特性著称&#xff0c;能够在亚秒级的时间内返回海量数据的查询结果…

MySQL主从复制与读写分离概述

前言&#xff1a; 在数据驱动的现代应用中&#xff0c;数据库面临高并发读写与海量存储的双重挑战。单一数据库实例在性能、可用性及扩展性上逐渐成为瓶颈。MySQL主从复制&#xff08;Master-Slave Replication&#xff09;与读写分离&#xff08;Read/Write Splitting&#xf…

数据库-元数据表

1. 什么是元数据表元数据&#xff1a;数据的数据&#xff0c;用以描述数据的信息也是数据&#xff0c;被称为元数据2. 获取元数据的方法MySQL提供了以下三种方法用于获取数据库对象的元数据&#xff1a;show语句从INFORMATION_SCHEMA数据库里查询相关表&#xff08;information…