Recreating iOS 26 Tab Bar Using SwiftUI (Without Liquid Glass) | Supports iOS 16.4+ | Xcode
🕑 Added 2025-07-12 17:53:27 +0000 UTCHello Guys πππ In this video, Iβll show you how to recreate new iOS 26 Tab Bar with Expandable Search Bar Using SwiftUI which supports iO
Hello Guys πππ
In this video, Iβll show you how to recreate new iOS 26 Tab Bar with Expandable Search Bar Using SwiftUI which supports iOS 16.4 Devices.
YouTube Video: https://youtu.be/pmsi5qYPWrY
Download Code π
Comments
Miroslav Djukic
Ok I figured it out only way to make this work globally is using .toolbar(content: { ToolbarItem(placement: .bottomBar) { TabView() } }) But there is catch, since this is attached outside of NavigationStack .toolbarBackground(.hidden, for: .bottomBar) doesn't work, so I had to reach to UIKit to make background invisible let appearance = UIToolbarAppearance() appearance.configureWithTransparentBackground() // removes blur & color appearance.backgroundColor = .clear // keep it fully clear appearance.shadowColor = .clear // drop top hairβline UIToolbar.appearance().standardAppearance = appearance // regular UIToolbar.appearance().scrollEdgeAppearance = appearance // when scrolled UIToolbar.appearance().compactAppearance = appearance Hope this helps someone, now whole app is aware and lets scroll content above TabView
Miroslav Djukic
Is there clean way to incorporate this into app that might have complex UI hierarchy lot of NavigationStack views in each "Tab" option so that it doesn't hide content (when scrolling to the bottom). Only way I can think of is using VStack and placing TabBar at the bottom but then we don't have nice scrolling behind it, I tried also .safeAreaInset(edge: .bottom) { } But that also doesn't work since Tab destination views are all wrapped in own NavigationStack or NavigationSplitView containers
thurman tsao
When conditionally showing/hiding the search bar, the indicator's offset is displayed incorrectly because the offset is applied before the active tab switches, causing a width mismatch. Is there a good solution for this?