made same task just today.
Since I can't use full space of tab bar for item image I just change tab bar background when user press any tab.
So the first step is to prepare background images with full size buttons for every tab selected.
Then create custom class and assign it for your tab bar controller
In your custom class set background image for first tab in ViewDidLoad:
[[self tabBar] setBackgroundImage:[UIImage imageNamed:@"tabShopsActive"]];
[[self tabBar] setSelectionIndicatorImage:[UIImage imageNamed:@"tabSelection"]];
Add background change for every UIController in ViewWillAppear:
UITabBarController *bar = [self tabBarController];
[bar.tabBar setBackgroundImage:[UIImage imageNamed:@"tabDiscountsActive"]];
So now when user press any tab Tab Bar change background to show correct picture for it.
It is my resulting tab bar when second tab selected:
