美文网首页超棒文集iOS Developer
iOS 多行标签自动换行

iOS 多行标签自动换行

作者: 无尽思绪 | 来源:发表于2016-12-13 09:15 被阅读117次

实现原理, 每一行用一个containerLineView来作为容器,如果换行,就从新生成一个containerLineView变量, containerLineView里面的每一个button用masonry来实现自动布局,很方便。

换行的判定: button的width + 间距(10) 是否大于屏幕宽度, 如果大于就换行。

示例:

UIView *containerLineView = [self getActivityContainerLineView:_activityView preView:nil];

        UIButton *lastBtn;
        UIButton *firstBtn;
//        NSInteger lineCount = (NSInteger) (kUIScreenSize.width / 110);
        CGFloat cWidth = 0;
        for (int i = 0; i <= data.count; i++) {
            ActivityButton *btn = [[ActivityButton alloc] init];
            [btn addTarget:self action:@selector(clickActivityBtn:) forControlEvents:UIControlEventTouchUpInside];

            //根据button的实际大小,来计算是否换行,原理就是计算button的长度如果超过屏幕的宽度就换行
            CGSize size = [btn sizeThatFits:CGSizeMake(MAXFLOAT, 25)];
            CGRect frame = btn.frame;
            frame.size = size;
            btn.frame = frame;
            cWidth += size.width;
            if (cWidth > kUIScreenSize.width - 20) { //超过屏幕宽度
                containerLineView = [self getActivityContainerLineView:_activityView preView:containerLineView];
                lastBtn = nil;
                cWidth = size.width;
            }

            [containerLineView addSubview:btn];
            cWidth += 10;
            [btn mas_makeConstraints:^(MASConstraintMaker *make) {
                make.top.equalTo(containerLineView);
                make.height.equalTo(@25);
                if (lastBtn) {
                    make.left.equalTo(lastBtn.mas_right).offset(10);
                } else {
                    make.left.equalTo(containerLineView).offset(10);
                }
            }];

            [self.activityButtons addObject:btn];

            lastBtn = btn;
        }

相关文章

网友评论

    本文标题:iOS 多行标签自动换行

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