自定义自动布局居中标签frame功能类

#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

你可能感兴趣的:(自定义自动布局居中标签frame功能类)