swiftui-liquid-glass - liquid-glass
发布时间:2026/10/12 3:42:47 锦皓数字建站

在 SwiftUI 中实现 Liquid Glass 设计概述Liquid Glass 是 iOS 中引入的一种动态材质结合了玻璃的光学特性与流动感。它会模糊其后的内容反射周围内容的颜色和光线并实时响应触摸和指针交互。本指南涵盖如何在 SwiftUI 应用中实现和自定义 Liquid Glass 效果。当被请求帮助采用新的 Apple 设计时你应该始终查找 Liquid Glass 的指南。Liquid Glass 的关键特性模糊材质背后的内容反射周围内容的颜色和光线响应触摸和指针交互可以在过渡期间在形状之间变形可用于标准组件和自定义组件基本实现为视图添加 Liquid Glass为视图添加 Liquid Glass 的最简单方式是使用glassEffect()修饰符Text(Hello, World!).font(.title).padding().glassEffect()默认情况下这会在视图内容后面的 Capsule 形状内应用常规变体的 Glass。自定义形状你可以为 Liquid Glass 效果指定不同的形状Text(Hello, World!).font(.title).padding().glassEffect(in:.rect(cornerRadius:16.0))常见的形状选项.capsule默认.rect(cornerRadius: CGFloat).circle自定义 Liquid Glass 效果Glass 变体与属性你可以通过配置Glass结构来自定义 Liquid Glass 效果Text(Hello, World!).font(.title).padding().glassEffect(.regular.tint(.orange).interactive())关键自定义选项.regular—— 标准玻璃效果.tint(Color)—— 添加颜色色调以暗示突出性.interactive(Bool)—— 让玻璃响应触摸和指针交互制作交互式玻璃让 Liquid Glass 响应触摸和指针交互Text(Hello, World!).font(.title).padding().glassEffect(.regular.interactive(true))或者更简洁地Text(Hello, World!).font(.title).padding().glassEffect(.regular.interactive())处理多个玻璃效果使用 GlassEffectContainer当对多个视图应用 Liquid Glass 效果时使用GlassEffectContainer以获得更好的渲染性能并启用混合和变形效果GlassEffectContainer(spacing:40.0){HStack(spacing:40.0){Image(systemName:scribble.variable).frame(width:80.0,height:80.0).font(.system(size:36)).glassEffect()Image(systemName:eraser.fill).frame(width:80.0,height:80.0).font(.system(size:36)).glassEffect()}}spacing参数控制 Liquid Glass 效果如何相互交互较小的间距视图需要更近才能合并效果较大的间距效果在更远的距离合并合并多个玻璃效果要将多个视图组合成单个 Liquid Glass 效果使用glassEffectUnion修饰符Namespaceprivatevarnamespace// 稍后在视图中GlassEffectContainer(spacing:20.0){HStack(spacing:20.0){ForEach(symbolSet.indices,id:\.self){iteminImage(systemName:symbolSet[item]).frame(width:80.0,height:80.0).font(.system(size:36)).glassEffect().glassEffectUnion(id:item2?1:2,namespace:namespace)}}}这在动态创建视图或视图位于 HStack 或 VStack 之外时很有用。变形效果与过渡创建变形过渡在带 Liquid Glass 的视图之间过渡时创建变形效果使用Namespace属性包装器创建命名空间使用glassEffectID为每个 Liquid Glass 效果关联唯一标识符在改变视图层级时使用动画StateprivatevarisExpanded:BoolfalseNamespaceprivatevarnamespacevarbody:someView{GlassEffectContainer(spacing:40.0){HStack(spacing:40.0){Image(systemName:scribble.variable).frame(width:80.0,height:80.0).font(.system(size:36)).glassEffect().glassEffectID(pencil,in:namespace)ifisExpanded{Image(systemName:eraser.fill).frame(width:80.0,height:80.0).font(.system(size:36)).glassEffect().glassEffectID(eraser,in:namespace)}}}Button(Toggle){withAnimation{isExpanded.toggle()}}.buttonStyle(.glass)}当带 Liquid Glass 的视图因视图层级变化而出现或消失时变形效果会发生。使用 Liquid Glass 的按钮样式玻璃按钮样式SwiftUI 为 Liquid Glass 提供内置的按钮样式Button(Click Me){// Action}.buttonStyle(.glass)突出的玻璃按钮样式对于更突出的玻璃按钮Button(Important Action){// Action}.buttonStyle(.glassProminent)高级技术背景扩展效果使用背景扩展效果将内容延伸到侧边栏或检查器后面NavigationSplitView{// Sidebar content}detail:{// Detail content.background{// Background content that extends under the sidebar}}将水平滚动延伸到侧边栏下方将水平滚动视图延伸到侧边栏或检查器下方ScrollView(.horizontal){// Scrollable content}.scrollExtensionMode(.underSidebar)最佳实践容器使用对多个视图应用 Liquid Glass 时始终使用GlassEffectContainer以获得更好的性能和变形效果。效果顺序在影响视图外观的其他修饰符之后应用.glassEffect()修饰符。间距考虑仔细选择容器中的间距值以控制玻璃效果如何以及何时合并。动画在改变视图层级时使用动画以启用平滑的变形过渡。交互性为应响应用户交互的玻璃效果添加.interactive()。一致的设计在应用中保持一致的形状和样式以获得统一的观感。示例带 Liquid Glass 的自定义徽章structBadgeView:View{letsymbol:Stringletcolor:Colorvarbody:someView{ZStack{Image(systemName:hexagon.fill).foregroundColor(color).font(.system(size:50))Image(systemName:symbol).foregroundColor(.white).font(.system(size:30))}.glassEffect(.regular,in:.rect(cornerRadius:16))}}// 使用方式GlassEffectContainer(spacing:20){HStack(spacing:20){BadgeView(symbol:star.fill,color:.blue)BadgeView(symbol:heart.fill,color:.red)BadgeView(symbol:leaf.fill,color:.green)}}参考Applying Liquid Glass to custom viewsLandmarks: Building an app with Liquid GlassSwiftUI View.glassEffect(_:in:isEnabled:)SwiftUI GlassEffectContainerSwiftUI GlassEffectTransitionSwiftUI GlassButtonStyle
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。