我只想有一个图标作为 UITabBarItem 而不是下面的文本,我想知道这是否可能,如果可以,如何?TIA
9 回答
如果您使用故事板,也许您可以使用Image Inset
from size inspector of bar item 并将标题同时设置为空:
如果您只是设置图像并将 nil 传递给标题,则图像将显示在 UITabBar 项的顶层。您还必须设置位置。
int offset = 7;
UIEdgeInsets imageInset = UIEdgeInsetsMake(offset, 0, -offset, 0);
为 TabBarItem 设置图标图像后,设置属性值以更改图像位置,执行以下操作:
uiViewController.tabBarItem.imageInsets = imageInset;
将项目的标题设置为 nil 通常是不够的,因为如果您设置视图控制器的标题,它也会设置标签栏项目的标题。
相反,请执行以下操作:
tabbarItem.titlePositionAdjustment = UIOffsetMake(0.f, 50.f);
你可以使用这个 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 上观察到的值。
我想其他设备和布局配置可能需要不同的偏移校正,因此通用解决方案可能必须更复杂。
我知道已经有一段时间了。但我可能有这个问题的解决方案。
@ThiagoPires 答案仅在图像大到足以覆盖标题时才有用。如果不是,则标题将在图像下方可见。
我认为最简单的方法是在视图控制器代码中将 tabBarItem 的标题设置为“”。
重要的是要知道每次更改视图控制器标题时,tabbaritem 的标题也会更新。您可以使用 KVO 来观察标题的变化,并相应地将 "" 设置为 tabbaritem 标题。但是,如果您不在代码中的很多地方更改它,您可以在更改 ViewController 标题的地方正确设置它。
这是一个快速的例子:
override func viewDidLoad() {
super.viewDidLoad()
self.title = "View controller's Title"
self.tabBarItem.title = ""
}
而已。我希望这会有所帮助。
相关文档(突出显示我的):
initWithTitle:image:tag: 使用指定的属性创建并返回一个新项目。
- (id)initWithTitle:(NSString *)title image:(UIImage *)image tag:(NSInteger)tag
参数
标题:项目的标题。如果为 nil,则不显示标题。
图片:商品的图片。如果为零,则不显示图像。标签栏上显示的图像来自此图像。如果此图像太大而无法放在选项卡栏上,则会对其进行裁剪以适应。标签栏图像的大小通常为 30 x 30 点。源图像中的 alpha 值用于创建未选中和选中的图像——不透明的值将被忽略。
tag:接收者的标签,一个整数,可用于标识应用程序中的条形项目对象。
返回值:具有指定属性的新初始化项。
试试下面的代码:
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;
像这样
UITabBarItem * personalBarItem = [[UITabBarItem alloc] init];
[personalBarItem setFinishedSelectedImage:[UIImage imageNamed:@"personal_click"] withFinishedUnselectedImage:[UIImage imageNamed:@"personal"]];