TabbarItem设置红点大小、自定义宽高

项目需求,希望当用户存在未读消息的时候在对应的UITabBarItem上显示小红点。发现IOS自带的UITabBarItem的badgeValue尺寸偏大,不满足项目需求。

第一步,建一个UITabBar的category类别。

TabbarItem设置红点大小、自定义宽高_第1张图片

第二步,编写代码。

.h文件

[objc]  view plain  copy
  1. #import <UIKit/UIKit.h>  
  2.   
  3. @interface UITabBar (badge)  
  4.   
  5. - (void)showBadgeOnItemIndex:(int)index;   //显示小红点  
  6.   
  7. - (void)hideBadgeOnItemIndex:(int)index; //隐藏小红点  
  8.   
  9. @end  

.m文件

[objc]  view plain  copy
  1. #import "UITabBar+badge.h"  
  2. #define TabbarItemNums 4.0    //tabbar的数量 如果是5个设置为5.0  
  3.   
  4. @implementation UITabBar (badge)  
[objc]  view plain  copy
  1. //显示小红点  
  2. - (void)showBadgeOnItemIndex:(int)index{    
  3.     //移除之前的小红点  
  4.     [self removeBadgeOnItemIndex:index];  
  5.   
  6.     //新建小红点  
  7.     UIView *badgeView = [[UIView alloc]init];  
  8.     badgeView.tag = 888 + index;  
  9.     badgeView.layer.cornerRadius = 5;//圆形  
  10.     badgeView.backgroundColor = [UIColor redColor];//颜色:红色  
  11.     CGRect tabFrame = self.frame;  
  12.   
  13.     //确定小红点的位置  
  14.     float percentX = (index +0.6) / TabbarItemNums;  
  15.     CGFloat x = ceilf(percentX * tabFrame.size.width);  
  16.     CGFloat y = ceilf(0.1 * tabFrame.size.height);  
  17.     badgeView.frame = CGRectMake(x, y, 1010);//圆形大小为10  
  18.     [self addSubview:badgeView];  
  19. }  
[objc]  view plain  copy
  1. //隐藏小红点  
  2. - (void)hideBadgeOnItemIndex:(int)index{  
  3.     //移除小红点  
  4.     [self removeBadgeOnItemIndex:index];  
  5. }  
[objc]  view plain  copy
  1. //移除小红点  
  2. - (void)removeBadgeOnItemIndex:(int)index{  
  3.     //按照tag值进行移除  
  4.     for (UIView *subView in self.subviews) {  
  5.         if (subView.tag == 888+index) {  
  6.             [subView removeFromSuperview];  
  7.         }  
  8.     }  
  9. }  
  10.   
  11. @end  

第三步,引入到需要使用的类中。

[objc]  view plain  copy
  1. #import "UITabBar+badge.h"  

引用代码如下:

[objc]  view plain  copy
  1. //显示  
  2. [self.tabBarController.tabBar showBadgeOnItemIndex:2];  
  3. //隐藏  
  4. [self.tabBarController.tabBar hideBadgeOnItemIndex:2]  


大功告成,接下来看看效果。

这里写图片描述


你可能感兴趣的:(ios,tabBarItem)