#import#import#define WIDTH [UIScreen mainScreen].bounds.size.width
#define HEIGHT [UIScreen mainScreen].bounds.size.height
//// 最小内边距
//#define MinPadding 20
//// 标签间距
//#define TagsMargin 10
//// 标签行间距
//#define TagsLineMargin 10
#define TagsTitleFont [UIFont systemFontOfSize:13]
@interface TagsFrame : NSObject
/** 标签名字数组 */
@property (nonatomic, strong) NSArray *tagsArray;
/** 标签frame数组 */
@property (nonatomic, strong) NSMutableArray *tagsFrames;
/** 全部标签的高度 */
@property (nonatomic, assign) CGFloat tagsHeight;
/** 标签间距 default is 10*/
@property (nonatomic, assign) CGFloat tagsMargin;
/** 标签行间距 default is 10*/
@property (nonatomic, assign) CGFloat tagsLineSpacing;
/** 标签最小内边距 default is 10*/
@property (nonatomic, assign) CGFloat tagsMinPadding;
@end
//实现细节
#import "TagsFrame.h"@implementation TagsFrame- (id)init{ self = [super init]; if (self) { _tagsFrames = [NSMutableArray array]; _tagsMinPadding = 10; _tagsMargin = 10; _tagsLineSpacing = 10; } return self;}- (void)setTagsArray:(NSArray *)tagsArray{ _tagsArray = tagsArray; CGFloat btnX = _tagsMargin; CGFloat btnW = 0; CGFloat nextWidth = 0; // 下一个标签的宽度 CGFloat moreWidth = 0; // 每一行多出来的宽度 /** * 每一行的最后一个tag的索引的数组和每一行多出来的宽度的数组 */ NSMutableArray *lastIndexs = [NSMutableArray array]; NSMutableArray *moreWidths = [NSMutableArray array]; for (NSInteger i=0; i(WIDTH - _tagsMargin)) {
// 计算超过的宽度
moreWidth = WIDTH - nextBtnX;
[lastIndexs addObject:[NSNumber numberWithInteger:i]];
[moreWidths addObject:[NSNumber numberWithFloat:moreWidth]];
btnX = _tagsMargin;
}else{
btnX += (btnW + _tagsMargin);
}
// 如果是最后一个且数组中没有,则把最后一个加入数组
if (i == tagsArray.count - 1) {
if (![lastIndexs containsObject:[NSNumber numberWithInteger:i]]) {
[lastIndexs addObject:[NSNumber numberWithInteger:i]];
[moreWidths addObject:[NSNumber numberWithFloat:0]];
}
}
}
NSInteger location = 0; // 截取的位置
NSInteger length = 0; // 截取的长度
CGFloat averageW = 0; // 多出来的平均的宽度
CGFloat tagW = 0;
CGFloat tagH = 30;
for (NSInteger i=0; i