仅作为 UITabBarItem 的图像
Posted
技术标签:
【中文标题】仅作为 UITabBarItem 的图像【英文标题】:Only image as UITabBarItem 【发布时间】:2012-08-04 20:35:40 【问题描述】:我只想有一个图标作为 UITabBarItem 而不是下面的文本,我想知道这是否可能,如果可以,如何? TIA
【问题讨论】:
【参考方案1】:如果你使用故事板,也许你可以使用 bar item 大小检查器中的Image Inset
并同时将标题设置为空:
【讨论】:
这样做会拉伸标签栏内的图像。【参考方案2】:删除标题
检查器的简单方法
选择您的 TabbarItem 在标题位置更改为自定义偏移量 将垂直设置为 100 完成修复图像
调整图片
选择您的 TabbarItem 定义您的顶部和底部【讨论】:
这个东西就像一个魅力。仅调整图像插图会拉伸标签栏内的图像。【参考方案3】:如果你只是设置图像并将 nil 传递给标题,图像将显示在 UITabBar 项的顶层。您还必须设置位置。
int offset = 7;
UIEdgeInsets imageInset = UIEdgeInsetsMake(offset, 0, -offset, 0);
为 TabBarItem 设置图标图像后,设置属性值以更改图像位置,这样做:
uiViewController.tabBarItem.imageInsets = imageInset;
【讨论】:
【参考方案4】:将项目的标题设置为 nil 通常是不够的,因为如果您设置视图控制器的标题,它也会设置标签栏项目的标题。
相反,这样做:
tabbarItem.titlePositionAdjustment = UIOffsetMake(0.f, 50.f);
【讨论】:
【参考方案5】:您可以使用这个 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
此扩展基于其他 cmets 提供的建议构建。
它通过替换标题来隐藏标题,而不是将其设置为nil
,因为有时其他对象(如视图控制器本身)会在标签栏项初始化后将标题设置为某个值。它通过使用imageInsets
将图像居中以将其偏移6pt,这是我在运行ios8.3 的iPhone 6 上观察它所得到的值。
我认为其他设备和布局配置可能需要不同的偏移校正,因此通用解决方案可能必须更复杂。
【讨论】:
完美解决方案。谢谢! UITabbar 在 xCode 9、swift 4 中没有成员 setTitlePositionAdjustment。 self.titlePositionAdjustment = UIOffset(水平:0,垂直:300 * 20)【参考方案6】:我知道已经有一段时间了。但我可能有这个问题的解决方案。
@ThiagoPires 答案仅在图像大到足以覆盖标题时才有用。如果不是,则标题将显示在图像下方。
我认为最简单的方法是在视图控制器代码中将 tabBarItem 的标题设置为 ""。
重要的是要知道每次更改视图控制器标题时,tabbaritem 的标题也会更新。您可以使用 KVO 来观察标题的变化,并相应地将 "" 设置为 tabbaritem 标题。但是,如果您不在代码中的很多地方更改它,您可以在更改 ViewController 标题的地方直接设置它。
这里是 swift 中的一个例子:
override func viewDidLoad()
super.viewDidLoad()
self.title = "View controller's Title"
self.tabBarItem.title = ""
就是这样。我希望这会有所帮助。
【讨论】:
【参考方案7】:相关文档(突出显示我的):
initWithTitle:image:tag: 使用指定的属性创建并返回一个新项目。
- (id)initWithTitle:(NSString *)title image:(UIImage *)image tag:(NSInteger)tag
参数
title:项目的标题。 如果为 nil,则不显示标题。
image:项目的图像。如果为零,则不显示图像。 标签栏上显示的图像来自此图像。如果此图像太大而无法放在选项卡栏上,则会对其进行裁剪以适应。标签栏图像的大小通常为 30 x 30 点。源图像中的 alpha 值用于创建未选中和选中的图像——不透明的值将被忽略。
tag:接收者的标签,一个整数,你可以用它来标识你的应用程序中的bar item对象。
返回值:具有指定属性的新初始化项。
【讨论】:
【参考方案8】:试试下面的代码:
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;
【讨论】:
【参考方案9】:喜欢这个
UITabBarItem * personalBarItem = [[UITabBarItem alloc] init];
[personalBarItem setFinishedSelectedImage:[UIImage imageNamed:@"personal_click"] withFinishedUnselectedImage:[UIImage imageNamed:@"personal"]];
【讨论】:
以上是关于仅作为 UITabBarItem 的图像的主要内容,如果未能解决你的问题,请参考以下文章