美文网首页
ios button带角标

ios button带角标

作者: 溜溜leesin | 来源:发表于2018-12-21 17:31 被阅读17次
    WeChatf08fdbfd5336bb4facf3c416d22e7d10.png

    借鉴大神无夜之星辰的文章

    代码如下:

    @interface HBButton : UIButton
    
    - (void)showBadgeWithNumber:(NSInteger)badgeNumber;
    
    - (void)hideBadge;
    
    @end
    
    ---------------
    #import "HBButton.h"
    
    @interface HBButton()
    
    @property (nonatomic, strong) UILabel *badgeLabel;
    
    @end
    
    @implementation HBButton
    
    -(instancetype)initWithFrame:(CGRect)frame
    {
        if (self = [super initWithFrame:frame]) {
            self.clipsToBounds = NO;
            [self.titleLabel setFont:[UIFont systemFontOfSize:16]];
            [self setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
            
            ///badge
            self.badgeLabel = [[UILabel alloc]init];
            [self addSubview:self.badgeLabel];
            self.badgeLabel.backgroundColor = [UIColor redColor];
            self.badgeLabel.textColor = [UIColor whiteColor];
            self.badgeLabel.layer.cornerRadius = 6;
            self.badgeLabel.clipsToBounds = YES;
            
    ///下面这句一定要加!!!!不然报错!自动布局技术是苹果在iOS 6当中新加入的,但在那时仍然有很多项目代码使用autoresizingMask与setFrame:的方式构建界面。试想,如果将一个已经设置好frame并使用autoresizingMask的视图添加到一个使用自动布局的视图中时,运行时需要隐式地将前者的frame和autoresizingMask转化为自动布局约束(这些隐式转换的约束的类型为NSAutoresizingMaskLayoutConstraint),这样才能明确其位置与尺寸而不会导致约束的缺失。这个隐式转换的过程,是由UIView的translatesAutoresizingMaskIntoConstraints属性的值决定的。默认情况下,为了保证兼容性,该值为YES,表示需要自动进行隐式转换。这对于兼容旧的代码当然是好的,然而当我们明确为视图添加了约束后,我们就不希望再进行autoresizingMask的隐式转换了,否则就会引起约束的冲突。因此,需要特别注意的是,当我们使用代码创建视图时,需要将translatesAutoresizingMaskIntoConstraints属性的值设置为NO
            self.badgeLabel.translatesAutoresizingMaskIntoConstraints = NO;
            
            [NSLayoutConstraint constraintWithItem:self.badgeLabel
                                         attribute:NSLayoutAttributeLeft
                                         relatedBy:NSLayoutRelationLessThanOrEqual
                                            toItem:self.titleLabel
                                         attribute:NSLayoutAttributeRight
                                        multiplier:1.0
                                          constant:-5].active = YES;
            
            [NSLayoutConstraint constraintWithItem:self.badgeLabel
                                         attribute:NSLayoutAttributeBottom
                                         relatedBy:NSLayoutRelationLessThanOrEqual
                                            toItem:self.titleLabel
                                         attribute:NSLayoutAttributeTop
                                        multiplier:1.0
                                          constant:5].active = YES;
    
            [NSLayoutConstraint constraintWithItem:self.badgeLabel
                                         attribute:NSLayoutAttributeHeight
                                         relatedBy:NSLayoutRelationEqual
                                            toItem:nil
                                         attribute:NSLayoutAttributeNotAnAttribute
                                        multiplier:1.0
                                           constant:18].active = YES;
    
        }
        return self;
    }
    
    #pragma mark - 显示角标
    /**
     显示角标
     
     @param badgeNumber 角标数量
     */
    - (void)showBadgeWithNumber:(NSInteger)badgeNumber{
        self.badgeLabel.hidden = NO;
        // 注意数字前后各留一个空格,不然太紧凑
        self.badgeLabel.text = [NSString stringWithFormat:@" %ld ",badgeNumber];
    }
    
    #pragma mark - 隐藏角标
    /** 隐藏角标 */
    - (void)hideBadge{
        self.badgeLabel.hidden = YES;
    }
    
    @end
    
    

    无夜之星辰大大写的用的第三方masonry做的约束,不巧 我的这个项目没用这个三方,so...~~自己看了一下NSLayout来写了一下。

    相关文章

      网友评论

          本文标题:ios button带角标

          本文链接:https://www.haomeiwen.com/subject/fldvkqtx.html