Note: This is a community fork of eggswift/ESTabBarController with iOS 26 Liquid Glass support. CocoaPods / Swift Package Manager are not provided here to avoid conflicting with the upstream release. Please integrate by downloading the source code.
ESTabBarController is a highly customizable TabBarController component, which is inherited from UITabBarController.
This fork adds iOS 26 layout properties on ESTabBar. Defaults work out of the box:
designType(default.automatic):.automaticadapts layout by OS version;.oldalways uses legacy TabBar layout (hides platter and distributes tabs evenly on iOS 26+)usesSystemGlassEffect(defaulttrue): effective only whendesignType == .automaticon iOS 26+;trueenables system Liquid Glass dual-layer embedding,falsehides system buttons and uses full-widthESTabBarItemContainerlayout
Default behavior: with no configuration, iOS 26 shows the system glass TabBar; below iOS 26 matches upstream legacy layout.
In real-world development, we may encounter the situation of customizing the UITabBar. For instance: change font style, add animation, and use bigger items. However it's hard to do with UITabBarItem.
With ESTabBarController, You can easily achieve these!
- Xcode 8 or later
- iOS 8.0 or later (Liquid Glass requires iOS 26.0+)
- ARC
- Swift 5 or later
You can download and build ESTabBarControllerExample project, and you will find more examples to use ESTabBarController, and also more examples to customize UITabBar. The Basic section includes the iOS 26 layout modes above.
let tabBarController = ESTabBarController()
if let tabBar = tabBarController.tabBar as? ESTabBar {
// .automatic (default, adapts by OS) or .old (force legacy layout)
tabBar.designType = .automatic
// Only when designType == .automatic on iOS 26+
// true: system glass dual-layer embed (default); false: custom container full-width layout
tabBar.usesSystemGlassEffect = true
}| Property | Default | Description |
|---|---|---|
designType |
.automatic |
.old ignores usesSystemGlassEffect and always uses legacy layout |
usesSystemGlassEffect |
true |
Effective only with .automatic on iOS 26+ |
This fork supports source download / manual integration only. CocoaPods and Swift Package Manager are intentionally not published.
git clone https://github.com/theNightLight/ESTabBarController.git
cd ESTabBarController
open ESTabBarControllerExample/ESTabBarControllerExample.xcodeproj- Drag all Swift files from
ESTabBarControllerExample/ESTabBarControllerExample/Sources/into your Xcode target. - Use
ESTabBarControlleras your root controller — see the Example project for reference.
For official CocoaPods / SPM from upstream, use eggswift/ESTabBarController.
- The Containers' layout is purely based on code,using Autolayout will be better.
- When there is "More," if edited, problems occur.
- Partial UITabBarItem attributes are not bridge to ESTabBarItem.
The picture of 'More' item in ESTabBarItemMoreContentView is not set into framework, plan to convert it to CGBitmap.
If this project helps you, consider buying me a coffee:
| Alipay | |
|---|---|
- animated-tab-bar by http://ramotion.com
- Partial pictures in Example are from http://www.iconfont.cn
Maintained by haochen. Questions and contributions welcome via Issues and Pull Requests.
See CHANGELOG.md.
The MIT License (MIT)
Copyright (c) 2013-2016 eggswift
Copyright (c) 2026 haochen
See LICENSE for the full text.
This project is modified based on eggswift/ESTabBarController. Original author: eggswift

























