Loading...
Loading...
Use when building UI with Apple's Liquid Glass material for iOS 26, iPadOS 26, macOS 26 - covers glassEffect, GlassEffectContainer, backgroundExtensionEffect, morph animations, toolbar grouping, button styles (.glass, .glassProminent), Icon Composer, ConcentricRectangle, scroll edge effects, and adoption best practices across SwiftUI, UIKit, and AppKit.
npx skill4agent add kmshdev/claude-swift-toolkit apple-liquid-glass-designswiftui-componentsswiftui-material-apiglassEffectGlassEffectContainer.glass.glassProminentToolbarSpacer(.fixed)ConcentricRectangleUIGlassEffectNSGlassEffectViewUIDesignRequiresCompatibilityglassBackgroundEffectGlassEffectContainer#available(iOS 26, *)GlassEffectContainerglassEffectinteractive()glassEffectID@NamespaceGlassEffectContainer.glassEffect(.regular.tint(...).interactive(), in: .rect(cornerRadius: ...)).buttonStyle(.glass).buttonStyle(.glassProminent)glassEffectIDif #available(iOS 26, *) {
content
.padding()
.glassEffect(.regular.interactive(), in: .rect(cornerRadius: 16))
} else {
content
.padding()
.background(.ultraThinMaterial, in: RoundedRectangle(cornerRadius: 16))
}.ultraThinMaterial.thinMaterial.regularMaterial.thickMaterial.ultraThickMaterialextension View {
@ViewBuilder
func glassEffectWithFallback(
_ style: Glass = .regular,
in shape: some Shape = .rect,
fallbackMaterial: Material = .ultraThinMaterial
) -> some View {
if #available(iOS 26, *) {
self.glassEffect(style, in: shape)
} else {
self.background(fallbackMaterial, in: shape)
}
}
}| Concept | Description |
|---|---|
| Liquid Glass | Dynamic material that blurs content behind it, reflects color/light, and reacts to touch and pointer in real time |
| Glass variants | |
| GlassEffectContainer | Groups multiple glass effects for performance and morph animations |
| Morph animation | Shapes blend/separate fluidly when views appear/disappear within a container |
| Background extension | Mirrors and blurs edge content under sidebars/inspectors for edge-to-edge feel |
| Icon Composer | Xcode tool for creating multilayer Liquid Glass app icons |
| ConcentricRectangle | Shape that maintains concentric corner radii relative to its container |
// Default: regular glass, capsule shape
Text("Hello")
.padding()
.glassEffect()
// Custom shape with rounded rectangle
Text("Hello")
.padding()
.glassEffect(in: .rect(cornerRadius: 16.0))
// Tinted + interactive (reacts to touch)
Text("Hello")
.padding()
.glassEffect(.regular.tint(.orange).interactive())// Standard glass button
Button("Action") { }
.buttonStyle(.glass)
// Prominent glass button (stronger visual weight)
Button("Primary") { }
.buttonStyle(.glassProminent)
// Clear variant glass button
Button("Subtle") { }
.buttonStyle(.glass(.clear))@State private var isExpanded = false
@Namespace private var namespace
GlassEffectContainer(spacing: 40.0) {
HStack(spacing: 40.0) {
Image(systemName: "scribble.variable")
.frame(width: 80, height: 80)
.glassEffect()
.glassEffectID("pencil", in: namespace)
if isExpanded {
Image(systemName: "eraser.fill")
.frame(width: 80, height: 80)
.glassEffect()
.glassEffectID("eraser", in: namespace)
}
}
}
Button("Toggle") {
withAnimation { isExpanded.toggle() }
}
.buttonStyle(.glass)NavigationSplitView {
// sidebar
} detail: {
ZStack {
Image(decorative: "hero")
.backgroundExtensionEffect()
.overlay(alignment: .bottom) {
// Overlay goes AFTER the modifier so it
// doesn't extend under the sidebar
Text("Title").font(.largeTitle)
}
}
}.toolbar {
ToolbarSpacer(.flexible)
ToolbarItem { ShareLink(item: item, preview: preview) }
ToolbarSpacer(.fixed)
ToolbarItemGroup {
FavoriteButton(item: item)
CollectionsMenu(item: item)
}
ToolbarSpacer(.fixed)
ToolbarItem {
Button("Info", systemImage: "info") { showInspector.toggle() }
}
}ScrollView(.horizontal, showsIndicators: false) {
LazyHStack(spacing: Constants.standardPadding) {
Spacer().frame(width: Constants.standardPadding)
ForEach(items) { item in
ItemView(item: item)
}
}
}
// Ensure no padding on containing view so scroll touches sidebar edgeBadgeLabel(badge: badge)
.glassEffect(.regular, in: .rect(cornerRadius: 12))GlassEffectContainer(spacing: 20.0) {
HStack(spacing: 20.0) {
ForEach(items.indices, id: \.self) { i in
Image(systemName: items[i])
.frame(width: 80, height: 80)
.glassEffect()
.glassEffectUnion(id: i < 2 ? "group1" : "group2",
namespace: namespace)
}
}
}TabView {
Tab("Numbers", systemImage: "number") {
ScrollView { /* content */ }
}
}
.tabBarMinimizeBehavior(.onScrollDown)ScrollView {
LazyVStack {
ForEach(data) { item in RowView(item) }
}
}
.scrollEdgeEffectStyle(.hard, for: .all)ZStack {
Color.cyan
.fill(.rect(corners: .concentric(minimum: 12), isUniform: false))
.padding(.all, padding)
}
.containerShape(.rect(cornerRadius: 24))| API | Framework | Purpose |
|---|---|---|
| SwiftUI | Apply Liquid Glass to any view |
| SwiftUI | Apply default (regular, capsule) glass |
| SwiftUI | Combine glass effects for performance + morphing |
| SwiftUI | Identity for morph transitions |
| SwiftUI | Control transition type ( |
| SwiftUI | Merge multiple shapes into one glass effect |
| SwiftUI | Config struct: |
| SwiftUI | Make glass react to touch/pointer |
| SwiftUI | Tint a glass effect |
| SwiftUI | Standard glass button |
| SwiftUI | Prominent glass button |
| SwiftUI | Clear variant glass button |
| SwiftUI | Extend view under sidebar/inspector |
| UIKit | Background extension in UIKit |
| AppKit | Background extension in AppKit |
| UIKit | Glass visual effect in UIKit |
| AppKit | Glass effect view in AppKit |
| SwiftUI | Separate toolbar groups |
| SwiftUI | |
| SwiftUI | Default capsule shape for glass |
| SwiftUI | Concentric corner radius shape |
| SwiftUI | Auto-minimize tab bar on scroll |
| SwiftUI | Legibility effect at scroll edges |
| Info.plist | Opt out of Liquid Glass (compatibility mode) |
glassEffectGlassEffectContainer.backgroundExtensionEffect().overlay()UIDesignRequiresCompatibilityreferences/| File | Content | Pages |
|---|---|---|
| Adopting Liquid Glass overview, Landmarks sample walkthrough, migration guide for existing apps | 2 |
| | 4 |
| | 23 |
| | 2 |
| Extending horizontal ScrollView under sidebar/inspector | 1 |
| Custom badges with glass effects, morph animations, ViewModifier patterns | 1 |
| | 2 |
| | 1 |
| Icon Composer workflow: layers, groups, Liquid Glass material, platform variants | 1 |
| | 1 |
| View styles overview, all Liquid Glass related SwiftUI style APIs | 1 |
references/getting_started.mdcustom_glass_views.mdglassEffectGlassEffectContainerUIGlassEffectUIBackgroundExtensionViewcustom_glass_views.mdbackground_extension.mdNSGlassEffectViewNSBackgroundExtensionViewToolbarSpacer(.fixed)backgroundExtensionEffect()GlassEffectContainerglassBackgroundEffectFeatheredGlassBackgroundEffectswiftui-26-api