masory 九宫格布局

 NSArray *titles=@[@" 1 ",@" 2 ",@" 3 ",@" 4 ",@" 5 ",@" 6 ",@" 7 ",@" 8 ",@" 9 ",@" 10 "];

    CGFloatmarginX =10;  //按钮距离左边和右边的距离

    CGFloatmarginY =1;  //距离上下边缘距离

    CGFloatgapX =20;    //左右按钮之间的距离

    CGFloatgapY =10;    //上下按钮之间的距离

    NSIntegercol =4;    //这里只布局5列

//CGFloat itemWidth = (viewWidth - marginX *2 - (col - 1)*gapX)/col*1.0f; //根据列数 和 按钮之间的间距 这些参数基本可以确定要平铺的按钮的宽度 CGFloat itemHeight = itemWidth; //按钮的高度可以根据情况设定 这里设置为相等

    CGFloatitemWidth =  (kScreenWidth/1.2 -80) / 4;;  //根据列数 和 按钮之间的间距 这些参数基本可以确定要平铺的按钮的宽度

    CGFloat itemHeight = 36;  //按钮的高度可以根据情况设定 这里设置为相等


    UIButton*last =nil//上一个按钮

    //准备工作完毕 既可以开始布局了

    for(inti =0; i < titles.count; i++) {

        UIButton*item = [selfbuttonCreat];

        [itemsetTitle:titles[i] forState:UIControlStateNormal];

        [white_ViewaddSubview:item];

        self.selectBtn=item;

        [itemmas_makeConstraints:^(MASConstraintMaker*make) {

            //宽高是固定的,前面已经算好了

            make.width.mas_equalTo(itemWidth);

            make.height.mas_equalTo(itemHeight);

            CGFloattop =60+ marginY + (i/col)*(itemHeight+gapY);


//            if (i == 0) {

//                //buttonMJ.enabled = NO;

//                item.selected=YES;

//                self.selectBtn = item;

//                //[item setBackgroundColor:[UIColor redColor]];

//                // 让按钮内部的label根据文字内容来计算尺寸

//                //[button.titleLabel sizeToFit];

//            }


            make.top.mas_offset(top);

            if (!last || (i%col) == 0) {  //last为nil  或者(i%col) == 0 说明换行了 每行的第一个确定它距离左边边缘的距离

                make.left.mas_offset(marginX);


            }else{

                //第二个或者后面的按钮 距离前一个按钮右边的距离都是gap个单位

                make.left.mas_equalTo(last.mas_right).mas_offset(gapX);

            }



        }];

        last = item;

    }


}

#pragma mark - Private

-(UIButton*)buttonCreat{

    UIButton*item = [[UIButtonalloc]init];

    //item.backgroundColor = [UIColor colorWithRed:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1.0f];

    item.titleLabel.font = [UIFont systemFontOfSize:16];

    [itemsetTitleColor:[UIColor lightGrayColor] forState:UIControlStateNormal];

    [itemsetTitleColor:[UIColor whiteColor] forState:UIControlStateSelected];


    [itemsetBackgroundImage:[UIImage imageNamed:@"btn_nomal"] forState:UIControlStateNormal];

    [itemsetBackgroundImage:[UIImage imageNamed:@"navgtionBackVi"] forState:UIControlStateSelected]; 

    [itemaddTarget:self action:@selector(numBtnClick:) forControlEvents:UIControlEventTouchUpInside];

    returnitem;

}


- (void)numBtnClick:(UIButton*)sender{  

   self.selectBtn.selected=NO;

    sender.selected=YES;

    self.selectBtn= sender;


}



///

-(void)layoutOneLine{

    //单行布局 不需要考虑换行的问题   

    CGFloat marginX = 10;  //按钮距离左边和右边的距离    CGFloat marginY = 10;  //按钮距离布局顶部的距离    CGFloat toTop = 50;  //布局区域距离顶部的距离    CGFloat gap = 10;    //按钮与按钮之间的距离    NSInteger col = 5;    //这里只布局5列    NSInteger count = 5;  //这里先设置布局5个按钮   

    CGFloat viewWidth = self.view.bounds.size.width;  //视图的宽度    CGFloat viewHeight = self.view.bounds.size.height;  //视图的高度   

    CGFloat itemWidth = (viewWidth - marginX *2 - (col - 1)*gap)/col*1.0f;  //根据列数 和 按钮之间的间距 这些参数基本可以确定要平铺的按钮的宽度    CGFloat height = itemWidth;  //按钮的高度可以根据情况设定 这里设置为相等   

    UIButton *last = nil;  //上一个按钮    //准备工作完毕 既可以开始布局了    for (int i = 0 ; i < count; i++) {

        UIButton *item = [self buttonCreat];

        [item setTitle:@(i).stringValue forState:UIControlStateNormal];

        [self.view addSubview:item];


        //布局        [item mas_makeConstraints:^(MASConstraintMaker *make) {


            //宽高是固定的,前面已经算好了            make.width.mas_equalTo(itemWidth);

            make.height.mas_equalTo(height);


            //topTop距离顶部的距离,单行不用考虑太多,多行,还需要计算距离顶部的距离            make.top.mas_offset(toTop+marginY);

            if (!last) {  //last为nil 说明是第一个按钮                make.left.mas_offset(marginX);

            }else{

                //第二个或者后面的按钮 距离前一个按钮右边的距离都是gap个单位                make.left.mas_equalTo(last.mas_right).mas_offset(gap);

            }

        }];

        last = item;

    }

}

你可能感兴趣的:(masory 九宫格布局)