首页 > 解决方案 > 为 UITabBarItem 创建自定义徽章

问题描述

我有一个蓝星 (UIImage),每当用户收到应用内消息时,我想将其添加到 UITabBarItem。

现在,我正在使用标准点:

self.tabs.tabBar.items[0].badgeValue = "1";
self.tabs.tabBar.items[0].badgeColor = UIColor.blueColor;

据我所知,只能自定义徽章的编号和徽章的颜色。但是,我想使用 UIImage 作为徽章。

我听说可以通过继承 UITabBarItem 类并自己绘制它来做到这一点: 如何使用自定义 UIImage 作为 UITabBarItem 徽章?

但是,我是objective-c的新手。有没有人有一个例子说明我如何用子类完成这个?

标签: iosobjective-cuitabbarcontrolleruitabbaruitabbaritem

解决方案


是的,您可以根据需要进行子类UITabBarItem化以填充其徽章上的样式,但您也可以使用setBadgeTextAttributes:forState:UITabBarItem 的方法。

这看起来像..

UITabBarItem *item = [[UITabBarItem alloc] initWithTitle:@"Atabbar" image:nil tag:0];
item.badgeValue = @"1";
item.badgeColor = UIColor.redColor;

NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
style.lineSpacing = 0.00001;
style.lineBreakMode = NSLineBreakByWordWrapping;
style.alignment = NSTextAlignmentLeft;
style.paragraphSpacing = 0.00001;
style.minimumLineHeight = 22.5f;
style.maximumLineHeight = 22.5f;
style.lineHeightMultiple = 1.0;
style.headIndent = 0.0;
style.tailIndent = 0.0;
    
NSDictionary<NSAttributedStringKey,id> *attr = @{
     NSParagraphStyleAttributeName:style,
     NSFontAttributeName:[UIFont fontWithName:@"HelveticaNeue-Thin" size:28.0],
     NSForegroundColorAttributeName:UIColor.grayColor
};
    
[item setBadgeTextAttributes:attr forState:UIControlStateNormal];
[item setBadgeTextAttributes:attr forState:UIControlStateHighlighted];
[item setBadgeTextAttributes:attr forState:UIControlStateDisabled];
[item setBadgeTextAttributes:attr forState:UIControlStateSelected];
item.titlePositionAdjustment = UIOffsetMake(0.0, 0.0);

self.tabs.tabBar.items[0] = item;

请注意并非所有 NSAttributedString 值都有意义,因为我不知道您希望实现什么设计。

这个苹果文档解释了无限的可能性

请注意,您可以制作自己的 OTF 字体,复制到您的项目资源中并编辑 info.plist 以使此字体在您的应用程序中可用,然后在设置 NSFontAttributeName 时使用它。但是如何制作和处理自己的字体是一个完全不同的问题。UIImage继续使用您的应用程序资产来制作您想要的东西可能会更方便。


推荐阅读