问题
Normally on each tab of a UITabBar
you have a small image and a title naming the tab. The image is positioned/centred towards the top of the tab to accommodate the title underneath. My question is: if you want to have a tabBar with just an image and no title is there a way to move the image down so it centers better within the tab?
I am using (see below) currently:
[tabBarItem setFinishedSelectedImage:tabSelected withFinishedUnselectedImage:tabUnselected];
but would prefer to use to larger image with no title, at the moment if I make the image bigger than about 70pixels@2x it starts edging off the top of the UITabBar
whilst leaving a lot of unused space at the bottom.
回答1:
Try adjusting tabBarItem
's imageInsets
(for moving the icon image) and setting the controllers title to nil (so no title is displayed). Put something like this to -init
or -viewDidLoad
method in view controller:
Objective-C
self.tabBarItem.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0);
self.title = nil;
Swift
self.tabBarItem.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)
self.title = nil
UITabBarItem
is a subclass of UIBarItem
which has UIEdgeInsets imageInsets
property. Play a little with the insets until it looks good (depending on your tabbar icon images)
回答2:
You can do it via storyboard too. Select your tabbaritem, go to size inspector and assign the appropriate insets.
*Demonstrated on Xcode, Version 7.3.1 (7D1014)
回答3:
Make a subclass of UITabBarController
, and in its viewDidLoad
:
- (void)viewDidLoad
{
[super viewDidLoad];
[self.viewControllers enumerateObjectsUsingBlock:^(UIViewController *vc, NSUInteger idx, BOOL *stop) {
vc.tabBarItem.title = nil;
vc.tabBarItem.imageInsets = UIEdgeInsetsMake(5, 0, -5, 0);
}];
}
Swift 3:
for vc in self.viewControllers! {
vc.tabBarItem.title = nil
vc.tabBarItem.imageInsets = UIEdgeInsetsMake(5, 0, -5, 0)
}
回答4:
If you're using Xamarin, this works:
screen.TabBarItem.ImageInsets = new UIEdgeInsets(5, 0, -5, 0);
screen.TabBarItem.Title = "";
回答5:
This worked for me
Swift 4
let array = tabBarController?.customizableViewControllers
for controller in array! {
controller.tabBarItem.imageInsets = UIEdgeInsetsMake(5, 0, -5, 0)
}
回答6:
SWIFT 3.0
You can set image lnsets, set top,left,bottom and right according desing.
self.tabBarItem.imageInsets = UIEdgeInsets(top: 5, left: 0, bottom: 0, right: 0)
回答7:
For iOS 11 you need to override TraitCollection method apart from setting ImageInsets. Please add the method in your subclassed UITabBarController class
public override UITraitCollection TraitCollection {
get {
return UITraitCollection.FromHorizontalSizeClass(horizontalSizeClass: UIUserInterfaceSizeClass.Compact);
}
}
回答8:
In Swift 4.2, UIEdgeInsetsMake
is depricated, instead we should use UIEdgeInsets
,
let array = tabBarController?.customizableViewControllers
for controller in array! {
controller.tabBarItem.imageInsets = UIEdgeInsets(top: 5, left: 0, bottom: -5, right: 0)
}
来源:https://stackoverflow.com/questions/16285205/moving-uitabbaritem-image-down