23

我只想有一个图标作为 UITabBarItem 而不是下面的文本,我想知道这是否可能,如果可以,如何?TIA

4

9 回答 9

25

如果您使用故事板,也许您可​​以使用Image Insetfrom size inspector of bar item 并将标题同时设置为空:

在此处输入图像描述

于 2014-11-08T17:08:40.533 回答
25

删除标题

检查员的简单方法

  • 选择您的 TabbarItem
  • 标题位置更改为自定义偏移
  • 将垂直设置为 100
  • 完毕

在此处输入图像描述

修复图像

调整图像

  • 选择您的 TabbarItem
  • 定义你的顶部底部

在此处输入图像描述

于 2015-11-16T03:58:39.373 回答
18

如果您只是设置图像并将 nil 传递给标题,则图像将显示在 UITabBar 项的顶层。您还必须设置位置。

int offset = 7;
UIEdgeInsets imageInset = UIEdgeInsetsMake(offset, 0, -offset, 0);

为 TabBarItem 设置图标图像后,设置属性值以更改图像位置,执行以下操作:

uiViewController.tabBarItem.imageInsets = imageInset;
于 2013-12-10T01:35:28.050 回答
14

将项目的标题设置为 nil 通常是不够的,因为如果您设置视图控制器的标题,它也会设置标签栏项目的标题。

相反,请执行以下操作:

tabbarItem.titlePositionAdjustment = UIOffsetMake(0.f, 50.f);
于 2014-03-07T06:15:00.527 回答
8

你可以使用这个 Swift 扩展来定义一个新的方法tabBarItemShowingOnlyImage(),它会返回任何UITabBarItem修改后的只显示图像:

// helper for creating an image-only UITabBarItem
extension UITabBarItem {
    func tabBarItemShowingOnlyImage() -> UITabBarItem {
        // offset to center
        self.imageInsets = UIEdgeInsets(top:6,left:0,bottom:-6,right:0)
        // displace to hide
        self.setTitlePositionAdjustment(UIOffset(horizontal:0,vertical:30000))
        return self
    }
}

此扩展基于其他评论中提供的建议构建。

它通过替换标题来隐藏标题,而不是将其设置为nil,因为有时其他对象(如视图控制器本身)会在标签栏项目初始化后将标题设置为某个值。它通过使用 6pt 将图像居中,imageInsets这是我在运行 iOS8.3 的 iPhone 6 上观察到的值。

我想其他设备和布局配置可能需要不同的偏移校正,因此通用解决方案可能必须更复杂。

于 2015-05-06T17:35:12.617 回答
3

我知道已经有一段时间了。但我可能有这个问题的解决方案。

@ThiagoPires 答案仅在图像大到足以覆盖标题时才有用。如果不是,则标题将在图像下方可见。

我认为最简单的方法是在视图控制器代码中将 tabBarItem 的标题设置为“”。

重要的是要知道每次更改视图控制器标题时,tabbaritem 的标题也会更新。您可以使用 KVO 来观察标题的变化,并相应地将 "" 设置为 tabbaritem 标题。但是,如果您不在代码中的很多地方更改它,您可以在更改 ViewController 标题的地方正确设置它。

这是一个快速的例子:

override func viewDidLoad() {

    super.viewDidLoad()

    self.title = "View controller's Title"

    self.tabBarItem.title = ""
}

而已。我希望这会有所帮助。

于 2015-04-08T04:14:13.197 回答
1

相关文档(突出显示我的):

initWithTitle:image:tag: 使用指定的属性创建并返回一个新项目。

- (id)initWithTitle:(NSString *)title image:(UIImage *)image tag:(NSInteger)tag

参数

标题:项目的标题。如果为 nil,则不显示标题。

图片:商品的图片。如果为零,则不显示图像。标签栏上显示的图像来自此图像。如果此图像太大而无法放在选项卡栏上,则会对其进行裁剪以适应。标签栏图像的大小通常为 30 x 30 点。源图像中的 alpha 值用于创建未选中和选中的图像——不透明的值将被忽略。

tag:接收者的标签,一个整数,可用于标识应用程序中的条形项目对象。

返回值:具有指定属性的新初始化项。

于 2012-08-04T20:38:33.103 回答
0

试试下面的代码:

UIViewController *viewController1=[[RootViewController alloc]initWithNibName:@"RootViewController" bundle:nil];
UIViewController *viewController2=[[SecondViewCtr alloc]initWithNibName:@"SecondViewCtr" bundle:nil];
UIViewController *viewController3=[[ThirdViewCtr alloc]initWithNibName:@"ThirdViewCtr" bundle:nil];
UIViewController *viewController4=[[FourthVIewCtr alloc]initWithNibName:@"FourthVIewCtr" bundle:nil];
UIViewController *viewController5=[[FIfthViewCtr alloc]initWithNibName:@"FIfthViewCtr" bundle:nil];


UINavigationController *nav1 = [[UINavigationController alloc] initWithRootViewController:viewController1];
UINavigationController *nav2 = [[UINavigationController alloc] initWithRootViewController:viewController2];
UINavigationController *nav3 = [[UINavigationController alloc] initWithRootViewController:viewController3];
UINavigationController *nav4 = [[UINavigationController alloc] initWithRootViewController:viewController4];
UINavigationController *nav5 = [[UINavigationController alloc] initWithRootViewController:viewController5];
peekArray = [[NSMutableArray alloc] init];

self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:nav1, nav2,nav3,nav4,nav5, nil];

UITabBar *tabBar = _tabBarController.tabBar;
UITabBarItem *tabBarItem1 = [tabBar.items objectAtIndex:0];
UITabBarItem *tabBarItem2 = [tabBar.items objectAtIndex:1];
UITabBarItem *tabBarItem3 = [tabBar.items objectAtIndex:2];
UITabBarItem *tabBarItem4 = [tabBar.items objectAtIndex:3];
UITabBarItem *tabBarItem5 = [tabBar.items objectAtIndex:4];

[tabBarItem1 setFinishedSelectedImage:[UIImage imageNamed:@"home123.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"home_112.png"]];
[tabBarItem2 setFinishedSelectedImage:[UIImage imageNamed:@"gift123.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"gift_112.png"]];
[tabBarItem3 setFinishedSelectedImage:[UIImage imageNamed:@"cam12.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"cam_112.png"]];
[tabBarItem4 setFinishedSelectedImage:[UIImage imageNamed:@"message12.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"message_112.png"]];
[tabBarItem5 setFinishedSelectedImage:[UIImage imageNamed:@"people12.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"people_112.png"]];

[self.tabBarController setSelectedIndex:0];
self.window.rootViewController = self.tabBarController;
于 2013-12-10T04:50:31.883 回答
0

像这样

UITabBarItem * personalBarItem = [[UITabBarItem alloc] init];
[personalBarItem setFinishedSelectedImage:[UIImage imageNamed:@"personal_click"] withFinishedUnselectedImage:[UIImage imageNamed:@"personal"]];
于 2013-12-10T02:46:48.133 回答