At WWDC 2025, Apple introduced Liquid Glass, a new design system that fundamentally changes how iOS interfaces look and behave.
What is GlassEffectContainer?
GlassEffectContainer is a SwiftUI container view introduced in iOS 26 that combines multiple Liquid Glass shapes into a single shape that can morph individual shapes into one another.
When you place views with the .glassEffect() modifier inside a GlassEffectContainer, SwiftUI automatically:
- Blends overlapping shapes together
- Applies consistent blur and lighting effects
- Enables smooth morphing transitions
- Improves rendering performance
Think of it as a special container that tells SwiftUI: "These glass elements belong together and should behave as one cohesive unit."
When to Use GlassEffectContainer
Use GlassEffectContainer when you need to:
- Create custom navigation controls - Floating action buttons, custom toolbars, or menu systems
- Group related glass elements - Multiple buttons or controls that should blend when close together
- Enable morphing animations - Transform between different UI states with fluid transitions
- Build floating UI elements - Components that sit above your main content layer
According to Apple's design guidelines, Liquid Glass should be reserved for the navigation layer, not for main content. The philosophy is that content sits at the bottom, and glass controls float on top.
Basic Usage
Here's a simple example of using GlassEffectContainer:
import SwiftUI
struct BasicGlassExample: View {
var body: some View {
ZStack {
// Background content
Image("background")
.resizable()
.ignoresSafeArea()
// Glass container with elements
GlassEffectContainer {
HStack(spacing: 20) {
Button("Home") {
// Action
}
.glassEffect()
Button("Settings") {
// Action
}
.glassEffect()
Button("Profile") {
// Action
}
.glassEffect()
}
.padding()
}
}
}
}
In this example, the three buttons will blend together when they're close, creating a unified glass appearance.
Understanding the Spacing Parameter
GlassEffectContainer has an optional spacing parameter that controls the morphing threshold:
GlassEffectContainer(spacing: 30) {
// Content
}
The spacing value determines how close elements need to be before they visually blend and morph together during transitions. Elements within this distance will merge into a single glass shape.
Creating Morphing Transitions
One of the most powerful features of GlassEffectContainer is the ability to create fluid morphing animations between different UI states. This requires three key components:
- A
GlassEffectContainerto group elements - A
@Namespaceto track element identity - The
.glassEffectID(_:in:)modifier on each glass element
Here's a complete example:
struct MorphingExample: View {
@State private var isExpanded = false
@Namespace private var namespace
var body: some View {
ZStack {
// Background
Color.blue.gradient
.ignoresSafeArea()
GlassEffectContainer(spacing: 20) {
VStack(spacing: 15) {
// Main toggle button - always visible
Button {
withAnimation(.bouncy) {
isExpanded.toggle()
}
} label: {
Image(systemName: isExpanded ? "xmark" : "plus")
.frame(width: 50, height: 50)
}
.glassEffect()
.glassEffectID("main", in: namespace)
// Additional buttons appear when expanded
if isExpanded {
Button("Camera") {
// Action
}
.glassEffect()
.glassEffectID("camera", in: namespace)
Button("Photos") {
// Action
}
.glassEffect()
.glassEffectID("photos", in: namespace)
Button("Files") {
// Action
}
.glassEffect()
.glassEffectID("files", in: namespace)
}
}
}
}
}
}
Glass Effect Modifiers
When applying .glassEffect() to views inside the container, you can customize the appearance:
// Basic glass effect
.glassEffect()
// With tint color
.glassEffect(.regular.tint(.purple))
// Interactive (scales, bounces on touch)
.glassEffect(.regular.interactive())
// Combined
.glassEffect(.regular.tint(.orange).interactive())
The .interactive() modifier makes glass elements respond to user touches with scaling, bouncing, and shimmering effects.
Button Styles
iOS 26 introduces dedicated button styles for glass:
// Translucent glass button (for secondary actions)
Button("Cancel") {
// Action
}
.buttonStyle(.glass)
// Opaque prominent glass button (for primary actions)
Button("Save") {
// Action
}
.buttonStyle(.glassProminent)
Platform Requirements
GlassEffectContainer requires:
- iOS 26.0 or later
- iPadOS 26.0 or later
- macOS 26.0 or later
- watchOS 26.0 or later
- tvOS 26.0 or later
- Xcode 26
Conclusion
GlassEffectContainer is a powerful tool for creating beautiful, fluid interfaces in iOS 26.

Top comments (1)
When you place views with the .glassEffect() modifier inside a GlassEffectContainer, SwiftUI automatically:
-Blends overlapping shapes together
-Applies consistent blur and lighting effects
-Enables smooth morphing transitions
-Improves rendering performance