边开发边学习

Masonry使用技巧

2018-03-15  本文已影响3人  coderhlt

一、相同View水平、竖直方向上排布

//- (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedSpacing:(CGFloat)fixedSpacing leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing;

//- (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedItemLength:(CGFloat)fixedItemLength leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing;
使用例子:

  for (int i=0; i<10; i++) {
       UIView *view=[[UIView alloc]init];
       [self.view  addSubview:view];
       view.backgroundColor=[UIColor redColor];
       [array addObject:view];
   
   }
   //等固定大小垂直方向上排布
   [array mas_distributeViewsAlongAxis:MASAxisTypeVertical withFixedItemLength:30 leadSpacing:10 tailSpacing:10];
   [array mas_makeConstraints:^(MASConstraintMaker *make) {
       make.left.equalTo(self.view).offset(20);
       make.width.equalTo(@40);
   }];
     //等固定大小水平方向上排布
   [array mas_distributeViewsAlongAxis:MASAxisTypeHorizontal withFixedItemLength:30 leadSpacing:10 tailSpacing:10];
   [array mas_makeConstraints:^(MASConstraintMaker *make) {
       make.top.equalTo(self.view).offset(20);
       make.height.equalTo(@40);
   }];

   //等间距水平方向上排布
   [array mas_distributeViewsAlongAxis:MASAxisTypeHorizontal withFixedSpacing:10 leadSpacing:10 tailSpacing:10];
   [array mas_makeConstraints:^(MASConstraintMaker *make) {
           make.top.equalTo(self.view).offset(20);
           make.height.equalTo(@40);
       }];
   
   //等间距垂直方向上排布
   [array mas_distributeViewsAlongAxis:MASAxisTypeVertical withFixedSpacing:10 leadSpacing:10 tailSpacing:10];
   [array mas_makeConstraints:^(MASConstraintMaker *make) {
       make.left.equalTo(self.view).offset(20);
       make.width.equalTo(@40);
   }];

二、lable显示多行需要得到高度

UILabel *lable=[[UILabel alloc]init];
   [self.view addSubview:lable];
   lable.text=@"1234567890123456789qqqqddd问问呜呜呜fffffffffggggggrrr0";
   lable.numberOfLines=0;
   [lable mas_makeConstraints:^(MASConstraintMaker *make) {
       make.left.top.equalTo(self.view).offset(100);
       make.width.equalTo(@100);
    }];
   lable.preferredMaxLayoutWidth=100;//如果你不需要拿到系统计算的高度值,你就没必要设置;如果你希望拿到这个值,建议你最好设置(因为在开发中发现,如果不设置的话拿到的值就不准确)
   
   //强制更新一下,如果不更新约束并不会马上转成frame,打印的值为0
   [lable layoutIfNeeded];
   
   //得到期望值
   NSLog(@"%f",lable.frame.size.height);

三、UIScrollview遇到Masonry。

UIScrollView是个非常特殊的view UIScrollView与其subview之间相对位置的约束 并不会直接用于frame的计算 而是会转化为对ContentSize的计算

   UIScrollView *scrollview=[[UIScrollView alloc]init];
   [self.view addSubview:scrollview];
   [scrollview mas_makeConstraints:^(MASConstraintMaker *make) {
       make.edges.equalTo(self.view);
   }];
   //1.初始化一个view容器
   UIView *contentview=[[UIView alloc]init];
   [scrollview addSubview:contentview];

   //2、这里的约束并不会转化成frame,而是决定了contantsize
   [contentview mas_makeConstraints:^(MASConstraintMaker *make) {
       //告诉scrollview的滚动内容是以contentview的边界为界限的
       make.edges.equalTo(scrollview);
       
       //内容的宽度是375,决定了水平方向可滚动的大小是375。
       make.width.equalTo(@375);
   }];

   UIView *redview=[[UIView alloc]init];
   redview.backgroundColor=[UIColor redColor];
   [contentview addSubview:redview];
   [array addObject:redview];
   
   [redview mas_makeConstraints:^(MASConstraintMaker *make) {
       make.left.right.top.equalTo(contentview);
       make.height.equalTo(@1000);
     
   }];
   
   //3、垂直方向可滚动的范围是直到redview的底部
   [contentview mas_makeConstraints:^(MASConstraintMaker *make) {
       make.bottom.equalTo(redview);
   }];
}

上一篇 下一篇

猜你喜欢

热点阅读