How to change the width of UITabBarItem?

Solution for iOS7 and greater versions:

A new property has been introduced for UITabBar: itemWidth.

Set the itemWidth to a positive value to be used as the width for tab bar items when they are positioned as a centered group (as opposed to filling the tab bar). Default of 0 or values less than 0 will be interpreted as a system-defined width.

@property(nonatomic) CGFloat itemWidth NS_AVAILABLE_IOS(7_0) UI_APPEARANCE_SELECTOR;

So you can do this in your AppDelegate:

[[UITabBar appearance] setItemWidth:WIDTH];

If you want to fill the whole UITabBar:

[[UITabBar appearance] setItemWidth:self.window.frame.size.width/NUMBER_OF_ITEMS];

How to fill the UITabBar


You can change the spacing (and width) of the tab bar items by subclassing UITabBar and overriding its layoutSubviews method. You will find all tab bar buttons in the self.subViews array. Their class is the non-public UITabBarButton but they inherit from UIControl so you can identify all tab bar buttons checking if they are kind of UIControl class. Then all you need is to change the frame of the tab bar buttons.


I just searched through the documentation and saw no method for adjusting the UITabBarItem's width.

A possible solution would be to place a view within the tab bar controller to load a custom UITabBarItem, that is the proper width.