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

SwiftUI 7(iOS 26)中玻璃化工具栏的艺术

在这里插入图片描述

🌊 Liquid Glass 简介:苹果设计美学的新纪元

苹果在 WWDC25 上大刀阔斧推出了全新设计语言 Liquid Glass(液态玻璃),全面影响旗下所有平台。其核心特点是界面元素的玻璃质感与光影通透效果,实现真正意义上的“虚实结合,界面如水”。

在这里插入图片描述

在上一篇博文中,我们聚焦于 Tabs 的玻璃化,这里我们将深入探讨另一关键控件的变革——工具栏(Toolbars) 的玻璃化蜕变。

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

    • 🌊 Liquid Glass 简介:苹果设计美学的新纪元
    • 🍸 工具栏新体验:不改代码,也能自动变身
    • 📦 基础示例:新旧兼容的优雅演绎
    • 🎭 保持兼容旧系统:labelStyle 定制样式
    • 🧱 自定义 LabelStyle:向下兼容神器
    • ✨ Placement 的魔法:位置决定样式
      • 示例:
      • 完整示例代码:
    • 🧰 Toolbar 分组与 Spacer 控制
      • 示例:
    • 📌 总结:Liquid Glass 下的 Toolbar 重构指南
    • 📮 写在最后

那小伙伴们还等什么呢?让我们马上开始 iOS 26 液态玻璃工具栏大冒险吧!
Let’s go!!!😉


🍸 工具栏新体验:不改代码,也能自动变身

Liquid Glass 对工具栏的设计带来了如下革新:

  • 背景呈现出半透明玻璃质感;
  • 支持 多组分布,将按钮逻辑分组显示;
  • 自动应用新风格,无需修改旧代码。

不过,为了更上一层楼,我们依然可以使用新 API 进行更为细致的定制。


📦 基础示例:新旧兼容的优雅演绎

struct ContentView: View {var body: some View {NavigationStack {List {Text("Item 1")Text("Item 2")Text("Item 3")}.navigationTitle("Items").toolbar {ToolbarItem(placement: .cancellationAction) {Button("Cancel", systemImage: "xmark") {}}ToolbarItem(placement: .confirmationAction) {Button("Done", systemImage: "checkmark") {}}}}}
}

运行结果如下图所示:

在这里插入图片描述

🧠 技术解析:
该示例依旧采用经典 .toolbar 修饰器,并结合 ToolbarItem 类型。Liquid Glass 推崇图标优先,因此按钮建议使用图文并茂样式,而不是纯文字。


🎭 保持兼容旧系统:labelStyle 定制样式

若宝子们仍需兼容旧版本的系统(例如 iOS 18 及之前),则我们可以保留文字工具栏的样式:

.labelStyle(.toolbar)

完整示例如下所示:

struct ContentView: View {var body: some View {NavigationStack {List {Text("Item 1")Text("Item 2")Text("Item 3")}.navigationTitle("Items").toolbar {ToolbarItem(placement: .cancellationAction) {Button("Cancel", systemImage: "xmark") {}.labelStyle(.toolbar)}ToolbarItem(placement: .confirmationAction) {Button("Done", systemImage: "checkmark") {}.labelStyle(.toolbar)}}}}
}

🧱 自定义 LabelStyle:向下兼容神器

上面的 Label 自定义样式 .toolbar 是如何做到的呢?下面我们就为宝子们揭晓答案:

struct ToolbarLabelStyle: LabelStyle {func makeBody(configuration: Configuration) -> some View {if #available(iOS 26, *) {Label(configuration)} else {Label(configuration).labelStyle(.titleOnly)}}
}@available(iOS, introduced: 18, obsoleted: 26, message: "Remove this property in iOS 26")
extension LabelStyle where Self == ToolbarLabelStyle {static var toolbar: Self { .init() }
}

📚 技术说明:

  • 为不同系统设置条件样式;
  • iOS 26 起设置为自动废弃,减少技术欠债;
  • labelStyle(.toolbar) 作为语义扩展点,增强代码整洁性。

✨ Placement 的魔法:位置决定样式

在 Liquid Glass 影响之下,工具栏中的 ToolbarItemPlacement 实参不仅决定按钮位置,也影响其风格!

.labelStyle(.toolbar)
.tint(.red) // 改变按钮颜色
.badge(3)   // 显示角标

示例:

ToolbarItem(placement: .confirmationAction) {Button("Done", systemImage: "checkmark") {}.labelStyle(.toolbar).badge(3)
}

完整示例代码:

struct ContentView: View {var body: some View {NavigationStack {List {Text("Item 1")Text("Item 2")Text("Item 3")}.navigationTitle("Items").toolbar {ToolbarItem(placement: .cancellationAction) {Button("Cancel", systemImage: "xmark") {}.labelStyle(.toolbar).tint(.red)}ToolbarItem(placement: .confirmationAction) {Button("Done", systemImage: "checkmark") {}.labelStyle(.toolbar).badge(3)}}}}
}

在 Xcode 26 中,预览运行结果如下所示:

在这里插入图片描述

💡 温馨提示:
虽然 tintbadge 炫酷抢眼,但苹果建议少量使用,依旧推荐通过 placement 实现布局分离。因为让液态玻璃自行决定大显身手的场景才是“你好,她也好!”。


🧰 Toolbar 分组与 Spacer 控制

在 Liquid Glass 中,库克为我们引入了两个新能力:

  • ToolbarItemGroup:将按钮按逻辑进行组内布局;
  • ToolbarSpacer:在 toolbar 中灵活插入空隙,支持 .fixed.flexible 宽度。

示例:

struct ToolsToolbar: ToolbarContent {var body: some ToolbarContent {ToolbarItem(placement: .cancellationAction) {Button("Cancel", systemImage: "xmark") {}}ToolbarItemGroup(placement: .primaryAction) {Button("Draw", systemImage: "pencil") {}Button("Erase", systemImage: "eraser") {}}ToolbarSpacer(.flexible)ToolbarItem(placement: .confirmationAction) {Button("Save", systemImage: "checkmark") {}}}
}

🛠 工程亮点:

  • 更符合实际业务分工:主操作、次操作、取消操作分组;
  • Spacer 提供更强自适应布局能力,排兵布阵,自由挥洒

在这里插入图片描述


📌 总结:Liquid Glass 下的 Toolbar 重构指南

亮点解说
自动玻璃化工具栏无需更改代码,即刻享受 Liquid Glass 风格
图标优先建议使用 systemImage + 文本
可扩展性自定义 LabelStyle 支持老版本兼容
可分组ToolbarItemGroup 组织逻辑结构
自适应布局ToolbarSpacer 实现弹性间距
样式控制支持 .badge.tint 等视觉修饰

📮 写在最后

工具栏的“玻璃化”不仅是视觉提升,更是对 UI/UX 一次脱胎换骨的优化。它让工具栏不再是生硬的控制面板,而是一个融入设计,功能与美感并存的现代化模块。

感谢观赏,再会啦!😎

http://www.lryc.cn/news/581223.html

相关文章:

  • 介绍electron
  • 基于spark的奥运会奖牌变化数据分析
  • 国产 OFD 标准公文软件数科 OFD 阅读器:OFD/PDF 双格式支持,公务办公必备
  • day44打卡
  • cmd 的sftp传输;Conda出现环境问题: error: invalid value for --gpu-architecture (-arch)
  • 浅度解读-(未完成版)浅层神经网络-多个隐层神经元
  • 前端-CSS-day1
  • 【openp2p】学习3:【专利分析】一种基于混合网络的自适应切换方法、装 置、设备及介质
  • WSL命令
  • 【爬虫】逆向爬虫初体验之爬取音乐
  • 大模型算法面试笔记——Bert
  • 计算机网络(网页显示过程,TCP三次握手,HTTP1.0,1.1,2.0,3.0,JWT cookie)
  • 一键将 SQL 转为 Java 实体类,全面支持 MySQL / PostgreSQL / Oracle!
  • 永磁同步电机无速度算法--基于锁频环前馈锁相环的滑模观测器
  • 使用SSH隧道连接远程主机
  • 五、Python新特性指定类型用法
  • 【赵渝强老师】Oracle RMAN的目录数据库
  • 数据库-元数据表
  • 事务的原子性
  • 自建双因素认证器 2FAuth 完美替代 Google Auth / Microsoft Auth
  • CSS 文字浮雕效果:巧用 text-shadow 实现 3D 立体文字
  • 虚拟机与容器技术详解:VM、LXC、LXD与Docker
  • HarmonyOS学习3---ArkUI
  • 《Redis》哨兵模式
  • ✨ OpenAudio S1:影视级文本转语音与语音克隆Mac整合包
  • 构建未来交互体验:AG-UI 如何赋能智能体与前端通信?
  • openai和chatgpt什么关系
  • hono框架绑定cloudflare的d1数据库操作步骤
  • 2025最新Telegram快读助手:一款智能Telegram链接摘要机器人
  • 【leetcode100】最长回文子串