Masonry是目前最流行的AutoLayout框架.
使用:
- 將Masonry文件包拖入項(xiàng)目
- 使用Masonry不需要設(shè)置
控件的translatesAutoresizingMaskIntoConstraints屬性為NO; - equal_to ( 對象 ) 和 mas_equalTo( 常量 )
Masonry簡單使用
相對父控件
[imgv1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self).offset(20);
make.top.equalTo(self).offset(20);
make.size.mas_equalTo(CGSizeMake(100, 100));
}];
子控件之間
位置、比例
(控件的上下左右邊都是對象)
[imgv5 mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.equalTo(imgv1.mas_trailing).offset(10);
make.top.equalTo(imgv1.mas_bottom).offset(10);
make.width.equalTo(imgv1).multipliedBy(0.5);
make.height.equalTo(imgv1).multipliedBy(0.5);
}];
位置、整體比例
[imgv2 mas_makeConstraints:^(MASConstraintMaker *make) {
make.right.equalTo(self).offset(-20);
make.top.equalTo(self).offset(20);
make.size.equalTo(imgv1).multipliedBy(0.5);
}];
內(nèi)邊距
第一種:
make.leading.top.mas_equalTo(@50);
make.trailing.bottom.mas_equalTo(@-50);
第二種:
make.edges.insets(UIEdgeInsetsMake(50, 50, 50, 50));
約束優(yōu)先級
[imgv1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.center.mas_equalTo(self.view);
// 初始寬、高為100,優(yōu)先級最低
make.width.height.mas_equalTo(100 * self.scacle).priorityLow();
// 最大放大到整個(gè)view
make.width.height.lessThanOrEqualTo(self.view);
}];
注意事項(xiàng):
- 子視圖只有被添加addsubviews( )之后,才能添加約束
- 當(dāng)更新約束時(shí),你就需要在此調(diào)用此方法,因?yàn)?updateConstraints方法是需要觸發(fā)的
// 調(diào)用在view 內(nèi)部,而不是viewcontroller
+(BOOL)requiresConstraintBasedLayout
{
return YES;
}
/**
* 蘋果推薦 約束修改 放在此方法種
*/
-(void)updateConstraints
{
[_imgv1 mas_updateConstraints:^(MASConstraintMaker *make) {
make.leading.equalTo(self);
make.top.equalTo(self).offset(20);
make.size.mas_equalTo(CGSizeMake(100, 100));
}];
//最后添加super方法
[super updateConstraints];
}
執(zhí)行動(dòng)畫怎么辦
首先:子視圖比例scale改變,導(dǎo)致變大
self.scacle += 0.5;
// 第一步(必須):self.view的設(shè)置需要更新的約束,但是不立即執(zhí)行
[self setNeedsUpdateConstraints];
/**
* 第二步(必須):通知self.view檢測結(jié)果顯示是否需要更新約束,
* 若需要?jiǎng)t立即更新,才會(huì)執(zhí)行下面的動(dòng)畫
*/
[self updateConstraintsIfNeeded];
/**
* 第三步(必須):self.view執(zhí)行動(dòng)畫
*/
[self animateWithDuration:0.4 animations:^{
[self layoutIfNeeded];
}];
//第四步(必須):width和height都變大
- (void)updateViewConstraints {
[self.growingButton mas_updateConstraints:^(MASConstraintMaker *make) {
make.center.mas_equalTo(self.view);
make.width.height.mas_equalTo(100 * self.scacle).priorityLow();// 初始寬、高為100,優(yōu)先級最低
make.width.height.lessThanOrEqualTo(self.view);// 最大放大到整個(gè)view
}];
[super updateViewConstraints];
}
重寫約束mas_remake
CGSize mysize = [item.title sizeWithFontSize:12 maxSize:CGSizeMake(MAXFLOAT, MAXFLOAT)];
if (mysize.width > kScreen_Width - 40) {
[cell.titlelabel mas_remakeConstraints:^(MASConstraintMaker *make) {
make.centerY.equalTo(cell.iconImageView);
make.centerX.equalTo(cell.iconImageView);
make.left.equalTo(cell.iconImageView).offset(10);
make.right.equalTo(cell.iconImageView).offset(-10);
}];
}else{
[cell.titlelabel mas_remakeConstraints:^(MASConstraintMaker *make) {
make.centerY.equalTo(cell.iconImageView);
make.centerX.equalTo(cell.iconImageView);
}];
}
百度云盤Demo下載:執(zhí)行動(dòng)畫更新約束