How native SwiftUI controls look different in iOS 26

⋅ 6 min read ⋅ SwiftUI iOS 26 Liquid Glass

Table of Contents

When you build an app with the iOS 26 SDK and run it on iOS 26, native SwiftUI controls automatically get a new appearance.

You don't need to add glassEffect() or change the existing code to see the difference.

In this article, I will compare buttons, toggles, pickers, sliders, toolbars, tab bars, and sheets on iOS 17 and iOS 26.

How I made the comparison

To make the comparison fair, both sides use the same app binary. I built it with Xcode 26.6 and the iOS 26.5 SDK with an iOS 17 deployment target.

I ran the app on two iPhone 15 Pro simulators:

  • Left: iOS 17.5, showing the design before Liquid Glass.
  • Right: iOS 26.3, showing the iOS 26 design.

Both simulators use Light Mode, the same text size, blue tint, and the same initial values.

The older runtime is iOS 17.5 because that was the pre-iOS-26 runtime available for this comparison.

Building with the new SDK is important. Standard components adopt the new appearance when an app is built with the iOS 26 SDK and runs on iOS 26. A lower deployment target still allows the same app to run on older iOS versions. See Adopting Liquid Glass.

You can easily support sarunw.com by checking out this sponsor.

Sponsor sarunw.com and reach thousands of iOS developers.

Buttons, toggles, pickers, and sliders

Let's start with buttons, toggles, pickers, and sliders.

iOS 17.5

Native buttons, toggles, segmented picker, and sliders on iOS 17.5.

iOS 26.3

The same native controls on iOS 26.3.
The same controls and initial values on both versions. Tap either image to see it at full size.

Bordered buttons have a different default shape

This example uses .bordered and .borderedProminent button styles.

iOS 17.5

A close-up of bordered SwiftUI buttons on iOS 17.5.

iOS 26.3

The same bordered SwiftUI buttons with capsule shapes on iOS 26.3.
The same bordered buttons become more capsule-shaped in iOS 26.
HStack(spacing: 16) {
Button("Save") { }
.buttonStyle(.bordered)

Button("Continue") { }
.buttonStyle(.borderedProminent)
}

On iOS 17.5, both buttons have rounded rectangle backgrounds. On iOS 26.3, they become capsule-shaped.

The code doesn't specify this shape anywhere. SwiftUI changes the appearance of the existing button styles automatically.

Toggle thumbs become wider

This example creates two toggles using Boolean states.

@State private var notifications = true
@State private var downloads = false

// Inside body:
Toggle("Notifications", isOn: $notifications)
Toggle("Automatic downloads", isOn: $downloads)

iOS 17.5

A close-up of native SwiftUI toggles on iOS 17.5.

iOS 26.3

The same native SwiftUI toggles with wider thumbs on iOS 26.3.
The switch thumb changes from a circle to a wider oval.

On iOS 17.5, the thumb is a circle. On iOS 26.3, it is a wider oval.

Segmented picker selections become rounder

The Day, Week, and Month control is a Picker with a segmented style.

@State private var selection = "Day"

// Inside body:
Picker("Period", selection: $selection) {
Text("Day").tag("Day")
Text("Week").tag("Week")
Text("Month").tag("Month")
}
.pickerStyle(.segmented)

iOS 17.5

A close-up of a segmented SwiftUI picker on iOS 17.5.

iOS 26.3

The same segmented SwiftUI picker with a rounder selection on iOS 26.3.
The selected segment becomes more rounded, and the thin separators disappear.

On iOS 26, the selected segment has a rounder shape, and the separators between segments disappear.

The screenshots only show the controls at rest. Toggles, segmented pickers, and sliders also have new Liquid Glass effects when you interact with them. You can see these effects in Build a SwiftUI app with the new design.

Stepped sliders make their steps visible

The lower slider has a step value of one.

@State private var level = 3.0

// Inside body:
Slider(value: $level, in: 0...5, step: 1)

iOS 17.5

A close-up of continuous and stepped SwiftUI sliders on iOS 17.5.

iOS 26.3

The same SwiftUI sliders with tick marks on the stepped slider in iOS 26.3.
Only the stepped slider gains visible tick marks.

On iOS 17.5, the track looks continuous even though the value changes in steps. On iOS 26.3, SwiftUI adds tick marks to show each possible value.

You don't need to add custom labels or draw the marks yourself.

Toolbar buttons and tab bars float above the content

The next screen contains a NavigationStack, three toolbar actions, and a TabView.

iOS 17.5

Explore screen with toolbar buttons and an edge-to-edge tab bar on iOS 17.5.

iOS 26.3

The same Explore screen with glass toolbar groups and a floating tab bar on iOS 26.3.
Compare the backgrounds behind the toolbar actions and the shape of the tab bar.

On iOS 17.5, toolbar buttons don't have a background. On iOS 26.3, SwiftUI places them on Liquid Glass surfaces.

The Add button uses a standard ToolbarItem.

iOS 17.5

A close-up of native toolbar actions on iOS 17.5.

iOS 26.3

The same toolbar actions grouped onto glass surfaces on iOS 26.3.
iOS 26 places the toolbar actions on adaptive glass surfaces.
.toolbar {
ToolbarItem(placement: .topBarTrailing) {
Button("Add", systemImage: "plus") {
showsSheet = true
}
}
}

There is no custom background or material. SwiftUI provides this appearance automatically.

The tab bar becomes a floating surface

The TabView code is also unchanged.

TabView {
ExploreView()
.tabItem { Label("Explore", systemImage: "safari") }

SavedView()
.tabItem { Label("Saved", systemImage: "bookmark") }
}

iOS 17.5

A close-up of an edge-to-edge SwiftUI tab bar on iOS 17.5.

iOS 26.3

The same SwiftUI tab bar floating above content on iOS 26.3.
The old tab bar reaches the screen edges; the iOS 26 bar floats above the content.

On iOS 17.5, the tab bar touches the left, right, and bottom edges of the screen. On iOS 26.3, it becomes a floating capsule with content visible around it.

This is the default appearance. To make the tab bar minimize when the user scrolls down, add .tabBarMinimizeBehavior(.onScrollDown) to TabView.

TabView {
// Tabs
}
.tabBarMinimizeBehavior(.onScrollDown)

Before scrolling

A full iOS 26 tab bar before scrolling.

After scrolling down

The iOS 26 tab bar minimized to the selected tab after scrolling down.
The tab bar collapses to the selected tab. It expands again when the user scrolls up.

Tab bar minimization is available on iPhone.

Partial-height sheets have inset edges

The Add button presents a sheet with medium and large detents.

.sheet(isPresented: $showsSheet) {
CollectionSheet()
.presentationDetents([.medium, .large])
.presentationDragIndicator(.visible)
}

CollectionSheet is the content view of the sheet. This example doesn't set presentationBackground or add a custom shape.

iOS 17.5

A medium-height New collection sheet on iOS 17.5.

iOS 26.3

The same medium-height sheet with inset edges on iOS 26.3.
The same sheet at its medium detent. Look at its side and bottom edges, as well as the Cancel button.

On iOS 17.5, the sheet touches the screen edges. On iOS 26.3, it is inset from the sides and bottom and has rounded corners.

The Liquid Glass background becomes opaque as the sheet expands to full height. Setting a custom presentation background can hide this behavior. See the sheet demonstration.

An iOS 26 sheet with an opaque background at its large detent.

At the large detent, the sheet uses an opaque background.

When testing a sheet, drag it between detents to see how the background changes.

You can easily support sarunw.com by checking out this sponsor.

Sponsor sarunw.com and reach thousands of iOS developers.

What changes automatically?

Here is a summary of the changes in this example.

Existing code in this demo What to look for on iOS 26
.bordered and .borderedProminent Rounder button backgrounds
Toggle and segmented Picker Updated shapes and interaction effects
Slider(..., step: 1) Visible tick marks
ToolbarItem Glass backgrounds around actions
TabView A floating tab bar
.sheet with partial-height detents Inset presentation edges

These changes come automatically from system components. Features such as glass button styles, tab bar minimization, and custom glass effects require additional APIs.

Before adding a custom glass effect, build your existing app with Xcode 26 and run it on iOS 26. Many native controls may already have the new appearance you want.


Read more article about SwiftUI, iOS 26, Liquid Glass, or see all available topic

Enjoy the read?

If you enjoy this article, you can subscribe to the weekly newsletter.
Every Friday, you'll get a quick recap of all articles and tips posted on this site. No strings attached. Unsubscribe anytime.

Feel free to follow me on Twitter and ask your questions related to this post. Thanks for reading and see you next time.

If you enjoy my writing, please check out my Patreon https://www.patreon.com/sarunw and become my supporter. Sharing the article is also greatly appreciated.

Become a patron Buy me a coffee Tweet Share
Previous
SwiftUI Liquid Glass - Regular vs Clear

Learn the difference between regular and clear Liquid Glass in SwiftUI, how each affects foreground colors, and when to use them.

← Home