【问题标题】:Creating a custom badge for a UITabBarItem为 UITabBarItem 创建自定义徽章
【发布时间】:2021-02-13 23:05:08
【问题描述】:

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

现在,我使用的是标准点:

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

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

我听说这可以通过继承 UITabBarItem 类并自己绘制来实现:How to use a custom UIImage as an UITabBarItem Badge?

但是,我是 Objective-c 的新手。有没有人举例说明我如何通过子类来实现这一点?

【问题讨论】:

  • tabBarItem.badgeValue = "1" 这不是客观的 -c
  • @zeytin 最初是用 swift 编码的——然后切换到 Objective-c。已编辑。谢谢
  • 是的,如果您想远离给定的 UI 设计,您必须使用自定义徽章子类化 NSTabBarItem。但也有 setBadgeTextAttributes:forState: 处理徽章 NSAttributedString,您可以使用其属性设置样式。

标签: ios objective-c uitabbarcontroller uitabbar uitabbaritem


【解决方案1】:

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

这看起来像..

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 值都有意义,因为我不知道您希望实现什么设计。

无限可能解释in this apple doc

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 2014-02-23
    • 2017-08-09
    • 2021-07-30
    • 2016-12-22
    • 1970-01-01
    相关资源
    最近更新 更多