Masonry 大家都不陌生,現在簡單分享下動態寬度使用心得。先簡述下問題,如圖:
A、C寬度根據文本內容自適應,B距離A、C之間的間距都是10pt。
直接上代碼:
1、A、C不設置寬度,其他約束按照正常設置
[self.bgView addSubview:self.leftBtn]; [self.leftBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.bgView); make.top.equalTo(self.bgView.mas_top).offset(15); make.height.mas_equalTo(16); }]; [self.bgView addSubview:self.rightBtn]; [self.rightBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.right.equalTo(self.bgView); make.top.equalTo(self.bgView); make.height.mas_equalTo(18); }]; self.nameLabel = [[UILabel alloc]init]; self.nameLabel.font = IC_TITLE_FONTNAMEWITHSIZE_16; self.nameLabel.textColor = XZWL_COLOR_333333; self.nameLabel.textAlignment = NSTextAlignmentLeft; [self.bgView addSubview:self.nameLabel]; [self.nameLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.right.equalTo(self.rightBtn.mas_left).offset(-10); make.left.equalTo(self.leftBtn.mas_right).offset(10); make.centerY.equalTo(self.leftBtn); make.height.mas_equalTo(16); }];
2、在賦值地方設置A、C寬度
[self.leftBtn setTitle:leftStr forState:UIControlStateNormal]; CGSize size = [self.leftBtn sizeThatFits:CGSizeZero]; [self.leftBtn mas_updateConstraints:^(MASConstraintMaker *make) { make.width.mas_equalTo(size.width); }]; CardDetailList *detailsModel = model.cardDetailList.firstObject; self.nameLabel.text = ObjErrorCheck(detailsModel.title); if (ObjErrorCheck(detailsModel.statusName).length) { self.rightBtn.hidden = NO; [self.rightBtn setBackgroundColor:[iComeCarrerCircleColorTool getEvaCardStateColor:detailsModel.statusColorType]]; [self.rightBtn setTitle: ObjErrorCheck(detailsModel.statusName) forState:UIControlStateNormal]; CGSize size = [self.rightBtn sizeThatFits:CGSizeZero]; [self.rightBtn mas_updateConstraints:^(MASConstraintMaker *make) { make.width.mas_equalTo(size.width); }]; } else { self.rightBtn.hidden = YES; }