Skip to content

Instantly share code, notes, and snippets.

@calt
Last active June 24, 2024 22:17
Show Gist options
  • Save calt/7ea29a65b440c2aa8a1a to your computer and use it in GitHub Desktop.
Save calt/7ea29a65b440c2aa8a1a to your computer and use it in GitHub Desktop.
UITabBar with custom height in Swift, does not work for iOS 14 or later.
// Does not work on iOS 14.0 or later, keeping the gist just for reference.
extension UITabBar {
override open func sizeThatFits(size: CGSize) -> CGSize {
super.sizeThatFits(size)
var sizeThatFits = super.sizeThatFits(size)
sizeThatFits.height = 71
return sizeThatFits
}
}
@Wei18
Copy link

Wei18 commented Nov 23, 2020

Work for me in iOS 14+, and others

class WeiTabBarController: UITabBarController {
    
    init() {
        
        super.init(nibName: nil, bundle: nil)
        
        object_setClass(self.tabBar, WeiTabBar.self)
        
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    
    class WeiTabBar: UITabBar {
        
        override func sizeThatFits(_ size: CGSize) -> CGSize {
            
            var sizeThatFits = super.sizeThatFits(size)
            
            sizeThatFits.height = 120
            
            return sizeThatFits
            
        }
        
    }
    
}

@Onyekachi-152
Copy link

@RemiRodrigues Thanks, you really saved me a lot of headaches.

@afaqsaqi
Copy link

@Wei18 Thank you man it works like a charm!

@homerblr
Copy link

homerblr commented Sep 7, 2021

@Wei18 you are a champ

@kepe94
Copy link

kepe94 commented Sep 7, 2021

Hi, This method works but how can I center the tab bar image to the updated height?
410AE454-7D74-42A2-A769-6F96B2B80607

@MoSaber-hub
Copy link

@Wei18 Thank you that's work for me too on iOS 14+

@ardacmen
Copy link

ardacmen commented Apr 12, 2023

@Wei18 thank you! still working for swift 5+

@Reginmaru
Copy link

New to Swift over here! - Trying to understand how I would use this in Views. Here is my Tabs View `struct Tabs: View {
@EnvironmentObject private var themeManager: ThemeManager
@Environment(.colorScheme) var mode: ColorScheme
@State private var selectedTab = 0

var body: some View {
        TabView(selection: $selectedTab) {
            DetailsView()
                .tabItem {
                    Text("Home")
                    TabImage(name: "misty", size: CGSize(width: 42, height: 42))
                    
                }
                .tag(0)
            
            SettingsView()
                .tabItem {
                    Text("Socials")
                    TabImage(name: "laptop", size: CGSize(width: 42, height: 42))
                    
                }
                .tag(1)
            
        }
        .onAppear(perform: {
            CustomTabBar().sizeThatFits(CGSize(width: 300, height: 400))
        })
        .accentColor(AppColors(mode: mode).jnjBorder)
}

}`

With the extension class CustomTabBar : UITabBar { override open func sizeThatFits(_ size: CGSize) -> CGSize { super.sizeThatFits(size) var sizeThatFits = super.sizeThatFits(size) sizeThatFits.height = 71 return sizeThatFits } }

However my emulator is still showing all clumped up. I've tried a few other ways to try and increase the height but nothing seems to work!

Here is the resulting emulator screenshot:
Screenshot 2024-06-24 at 23 15 58

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment