移动UITabBarItem图像?

时间:2013-04-29 17:57:27

标签: iphone objective-c cocoa-touch uitabbar uitabbaritem

通常在UITabBar的每个标签上都有一个小图片和一个标题,用于命名标签。图像位于标签顶部/居中,以容纳下方的标题。我的问题是:如果你想让tabBar只有一个图像,没有标题可以将图像向下移动,以便在标签中更好地居中?

我目前正在使用(见下文):

[tabBarItem setFinishedSelectedImage:tabSelected withFinishedUnselectedImage:tabUnselected];

但更喜欢使用没有标题的较大图像,目前如果我使图像大于约70像素@ 2x它开始偏离UITabBar的顶部,同时留下大量未使用的空间底部。

9 个答案:

答案 0 :(得分:163)

尝试调整tabBarItem的{​​{1}}(用于移动图标图像)并将控制器标题设置为nil(因此不会显示标题)。将这样的内容添加到视图控制器中的imageInsets-init方法:

<强>目标C

-viewDidLoad

<强>夫特

self.tabBarItem.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0);
self.title = nil;

self.tabBarItem.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0) self.title = nil UITabBarItem的子类,具有UIBarItem属性。使用插图播放一点,直到它看起来很好(取决于您的tabbar图标图像)

答案 1 :(得分:135)

您也可以通过故事板进行操作。选择tabbaritem,转到尺寸检查器并指定相应的插图。

enter image description here

*在Xcode上展示,版本7.3.1(7D1014)

答案 2 :(得分:47)

创建UITabBarController的子类,并在其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);
    }];
}

斯威夫特3:

for vc in self.viewControllers! {
    vc.tabBarItem.title = nil
    vc.tabBarItem.imageInsets = UIEdgeInsetsMake(5, 0, -5, 0)
}

答案 3 :(得分:9)

如果你正在使用Xamarin,这可行:

screen.TabBarItem.ImageInsets = new UIEdgeInsets(5, 0, -5, 0);
screen.TabBarItem.Title = "";

答案 4 :(得分:8)

这对我有用

Swift 4

let array = tabBarController?.customizableViewControllers
for controller in array! {
    controller.tabBarItem.imageInsets = UIEdgeInsetsMake(5, 0, -5, 0)
}

答案 5 :(得分:2)

SWIFT 3.0

您可以根据设计设置图像设置,设置顶部,左侧,底部和右侧。

self.tabBarItem.imageInsets = UIEdgeInsets(top: 5, left: 0, bottom: 0, right: 0)

答案 6 :(得分:2)

对于iOS 11,除了设置ImageInsets之外,您还需要覆盖 TraitCollection 方法。 请在子类UITabBarController类中添加方法

public override UITraitCollection TraitCollection {
 get {
  return UITraitCollection.FromHorizontalSizeClass(horizontalSizeClass: UIUserInterfaceSizeClass.Compact);
 }
}

答案 7 :(得分:0)

Swift 4.2 中,UIEdgeInsetsMake被删除,相反,我们应该使用UIEdgeInsets

let array = tabBarController?.customizableViewControllers
    for controller in array! {
        controller.tabBarItem.imageInsets = UIEdgeInsets(top: 5, left: 0, bottom: -5, right: 0)
    }

答案 8 :(得分:0)

这些对我不起作用,唯一可行的解​​决方案是在添加图像时设置 alignmentRectInsets 。这是我的样子:

let newsView = NewsViewController()
let newsIcon = UITabBarItem(title: nil, image: UIImage(systemName: "newspaper")?.withAlignmentRectInsets(UIEdgeInsets(top: 8.5, left: 0, bottom: -8.5, right: 0)), tag: 0)
newsView.tabBarItem = newsIcon
let viewControllers = [newsNavController]
self.viewControllers = viewControllers