有时候碰见两行一样的按钮, 不想用collectionView,一个个写是更不可能的了,所以for循环创建完之后用这个方法排列一下搞定
/**
排列view,横向间隔自动计算
@param views 要排列的views
@param width 总宽度
@param column 列数(每行几个)
@param origin 起始点(第一个view起始点)
@param verDistance views纵向间隔(行间距)
*/
- (void)arrangeViews:(NSArray *)views
superviewWidth:(float)width
column:(int)column
origin:(CGPoint)origin
verticalDistance:(float)verDistance
{
for (int i = 0; i < views.count; i++) {
UIView *view = views[i];
//起始x 两个x的差 列:i%column
view.x = origin.x + i%column * (width-2*origin.x-view.width)/(column-1);
//起始y 两个y的差 行:i/column
view.y = origin.y + i/column * (view.height+verDistance);
}
}
/**
排列view,固定间隔,自动计算列数
@param views 要排列的views
@param width 总宽度
@param origin 起始点(第一个view起始点)
@param distance 间距
*/
- (void)arrangeViews:(NSArray *)views
superviewWidth:(float)width
origin:(CGPoint)origin
distance:(float)distance
{
for (int i = 0; i < views.count; i++) {
UIView *view = views[i];
//一共多少列
int column = (width - origin.x*2)/(view.width + distance);
//起始x+当前列数*(间隔+view.width) 当前列:i%列数
view.x = origin.x + i%column * (distance+view.width);
//起始y+当前行数*(间隔+view.height) 当前行:i/列数
view.y = origin.y + i/column * (distance+view.height);
}
}
为了方便偷懒把创建button的代码也放上:
- (void)createBtns {
NSArray *titleArr = @[@"快捷回复", @"结束对话", @"下达医嘱", @"收起", @"坐诊信息", @"添加图片"];
NSArray *imgArr = @[@"qd_kjhf_n", @"qd_jsdh", @"qd_xdyz", @"qd_zk_n", @"qd_zzxx_n", @"qd_tjtp"];
NSMutableArray *btnArr = [NSMutableArray array];
for (int i = 0; i < titleArr.count; i++) {
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.size = CGSizeMake(44, 46);
[btn setTitle:titleArr[i] forState:UIControlStateNormal];
[btn setImage:[UIImage imageNamed:imgArr[i]] forState:UIControlStateNormal];
[btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
//MARK: 上下排列图文
btn.titleLabel.font = [UIFont systemFontOfSize:10];
btn.titleEdgeInsets = UIEdgeInsetsMake(btn.imageView.height, -btn.imageView.width, 0, 0);
btn.imageEdgeInsets = UIEdgeInsetsMake(0, 0, btn.height - btn.imageView.height, -btn.titleLabel.width);
[_btnsContainer addSubview:btn];
btn.tag = i+200;
[btn addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside];
[btnArr addObject:btn];
}
[self arrangeViews:btnArr superviewWidth:kScreenWidth column:4 origin:CGPointMake(22, 8) verticalDistance:6];
}
哦对了,用了Category所以是view.x view.width这种写法