仅作为 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 的图像的主要内容,如果未能解决你的问题,请参考以下文章

如何重新创建 UITabBarItem 图像过滤器?

UITabBar 在 iOS7 上更改一个 UITabBarItem 的背景颜色

UITabBarItem 更改图像高度和宽度

UITabBarItem 内的图像位置

仅更改一种特定的 UITabBarItem 色调颜色

更改 UITabBarItem 图像的颜色