美文网首页iOS开发
iOS开发简单标签云的实现

iOS开发简单标签云的实现

作者: Stephen_Huang | 来源:发表于2018-05-17 15:20 被阅读0次

    话不多说,直接上代码,通过Masonry进行布局

    - (void )creatUI{
        NSArray *array = @[@"测试",@"测试测试测试测试测试",@"测试",@"测试测试测试测试测试测试",@"测试",@"测试测试",@"测试测试测试",@"测试测试测试测试",@"测试"];
        
        UIButton *listButton;
        
        __block float buttonRight;
        
        for (int i = 0; i < array.count; i++) {
            
            NSString *title = array[i];
            
            CGFloat titleW = [self labelAutoCalculateRectWith:title FontSize:14 MaxSize:CGSizeMake(MAXFLOAT, MAXFLOAT)].width + 20;
            UIButton *button = [UIButton new];
            button.tag = i;
            button.backgroundColor = [UIColor blueColor];
            [button setTitle:title forState:UIControlStateNormal];
            [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
            [button addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];
            button.titleLabel.font = [UIFont systemFontOfSize:14];
            button.layer.cornerRadius = 10;
            button.layer.masksToBounds = YES;
            [self.view addSubview:button];
            [button mas_makeConstraints:^(MASConstraintMaker *make) {
                
                if (listButton) {
                    //当前按钮右侧坐标
                    buttonRight = buttonRight + 15 + titleW;
                    if (buttonRight > self.view.frame.size.width) {
                        make.top.mas_equalTo(listButton.mas_bottom).offset(15);
                        make.left.mas_equalTo(10);
                        buttonRight = 30 + titleW;
                    }else{
                        make.top.mas_equalTo(listButton.mas_top).offset(0);
                        make.left.mas_equalTo(listButton.mas_right).offset(15);
                    }
                }else{
                    make.top.mas_equalTo(25);
                    make.left.mas_equalTo(10);
                    buttonRight = 30 + titleW;
                }
                make.size.mas_equalTo(CGSizeMake(titleW, 20));
                
                
            }];
            
            listButton = button;
            
            
        }
    }
    
    - (CGSize)labelAutoCalculateRectWith:(NSString *)text FontSize:(CGFloat)fontSize MaxSize:(CGSize)maxSize {
        NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc]init];
        paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;
        NSDictionary * attributes = @{NSFontAttributeName:[UIFont systemFontOfSize:fontSize], NSParagraphStyleAttributeName:paragraphStyle.copy};
        CGSize labelSize = [text boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin |NSStringDrawingUsesFontLeading | NSStringDrawingTruncatesLastVisibleLine attributes:attributes context:nil].size;
        labelSize.height = ceil(labelSize.height);
        labelSize.width = ceil(labelSize.width);
        return labelSize;
    }
    
    - (void )btnClicked:(UIButton *)btn{
        NSLog(@"%zd",btn.tag);
    }
    

    效果图如下


    picture.jpeg

    相关文章

      网友评论

        本文标题:iOS开发简单标签云的实现

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