💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# Masonry # 不建议使用masonry ## `viewForHeaderInSection` 里面的视图,没法自动布局 此处为tableView的组头view,注意,此处组头view要使用frame来进行布局,不能使用Masonry约束布局。 原因:组头view本身所属于tableView,并没有兄弟/父子视图关系,使用Masonry进行约束布局,只能作用于父子/兄弟视图间。 我是这么理解的,可能理解有误,在这里我只是提醒一下,不能使用Masonry对组头视图布局,组尾视图是一样的道理。 ** ## 父视图是ScrollView 如果你的项目,父视图是ScrollView,那么我建议你,还是不要用Masonry。scrollView自身就是有约束设置的,再用Masonry进行子视图的约束,子视图的约束将会失效,当然如果你有很长的时间来研究scrollView自身约束和Masonry库约束的冲突的话(这里姑且让我用冲突这个词语吧),那你可以肆无忌惮的使用Masonry库了。 参考:http://blog.csdn.net/a645258072/article/details/51283135 *** 使用方法 约束视图对象只有在被`addSubview`之后,才能给视图添加约束 - 新方法:2个或2个以上的控件等间隔排序 ``` /** * 多个控件固定间隔的等间隔排列,变化的是控件的长度或者宽度值 * * @param axisType 轴线方向 * @param fixedSpacing 间隔大小 * @param leadSpacing 头部间隔 * @param tailSpacing 尾部间隔 */ - (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedSpacing:(CGFloat)fixedSpacing l eadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing; /** * 多个固定大小的控件的等间隔排列,变化的是间隔的空隙 * * @param axisType 轴线方向 * @param fixedItemLength 每个控件的固定长度或者宽度值 * @param leadSpacing 头部间隔 * @param tailSpacing 尾部间隔 */ - (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedItemLength:(CGFloat)fixedItemLength leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing; ``` 使用方法很简单,因为它是NSArray的类扩展: ``` // 创建水平排列图标 arr中放置了2个或连个以上的初始化后的控件 // alongAxis 轴线方向 固定间隔 头部间隔 尾部间隔 [arr mas_distributeViewsAlongAxis:MASAxisTypeHorizontal withFixedSpacing:20 leadSpacing:5 tailSpacing:5]; [arr mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(@60); make.height.equalTo(@60); }]; ``` 场景五、多个view一起布局(以组为单位布局) 效果: ![img](http://images2015.cnblogs.com/blog/527522/201510/527522-20151026170842185-1992793891.png) ``` - (instancetype)init { self = [super init]; if (self) { NSArray *strArr = @[@"10",@"20",@"50",@"100",@"200",@"300"]; NSMutableArray *mutableArr = [[NSMutableArray alloc] initWithCapacity:6]; for (int i=0; i<3; i++) { UIButton *button = [[UIButton alloc] init]; [button setTitle:strArr[i] forState:UIControlStateNormal]; [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; button.layer.borderColor = [UIColor blackColor].CGColor; [button addTarget:self action:@selector(show:) forControlEvents:UIControlEventTouchUpInside]; button.layer.borderWidth = 2; [self addSubview:button]; [mutableArr addObject:button]; } [mutableArr mas_distributeViewsAlongAxis:MASAxisTypeHorizontal withFixedSpacing:20 leadSpacing:20 tailSpacing:20]; [mutableArr mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(@120); make.height.equalTo(@75); }]; /** * ----------------------- */ NSMutableArray *marr = [NSMutableArray new]; for (int i=3; i<6; i++) { UIButton *button = [[UIButton alloc] init]; [button setTitle:strArr[i] forState:UIControlStateNormal]; [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; button.layer.borderColor = [UIColor blackColor].CGColor; [button addTarget:self action:@selector(show:) forControlEvents:UIControlEventTouchUpInside]; button.layer.borderWidth = 2; [self addSubview:button]; [marr addObject:button]; } [marr mas_distributeViewsAlongAxis:MASAxisTypeHorizontal withFixedSpacing:20 leadSpacing:20 tailSpacing:20]; [marr mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(@200); make.height.equalTo(@75); }]; } return self; } ```