ios - 为 UITabBarItem 创建自定义徽章
问题描述
我有一个蓝星 (UIImage),每当用户收到应用内消息时,我想将其添加到 UITabBarItem。
现在,我正在使用标准点:
self.tabs.tabBar.items[0].badgeValue = "1";
self.tabs.tabBar.items[0].badgeColor = UIColor.blueColor;
据我所知,只能自定义徽章的编号和徽章的颜色。但是,我想使用 UIImage 作为徽章。
我听说可以通过继承 UITabBarItem 类并自己绘制它来做到这一点: 如何使用自定义 UIImage 作为 UITabBarItem 徽章?
但是,我是objective-c的新手。有没有人有一个例子说明我如何用子类完成这个?
解决方案
是的,您可以根据需要进行子类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
继续使用您的应用程序资产来制作您想要的东西可能会更方便。
推荐阅读
- sqlite - 使用来自另一个数据库文件的值更新 sqlite 列
- ios - 传送到通知中心的 UNUserNotification 未在屏幕上显示为横幅
- reactjs - 如何使用我自己的 webpack.config 调试我的反应应用程序?
- c# - 网状矩形结构
- python - 在没有 for 循环的情况下修改特定位置的 Numpy 二维数组的元素
- firebase - 每天有多少写入标准配额
- maven - 如果在另一个 repo 中,Maven 不会解析父级的修订
- azure-devops-rest-api - 如何使用 Dev Ops Rest Api 在 Dev Ops 中对构建进行排队
- c# - 如何测试鼠标右键拖动?
- python - Python:如何循环超过 10 个,然后反向传播,然后循环下一个 10