本文将介绍Masonry另一种设置约束的方法:mas_remakeConstraints
:意思是重新设置约束。在此之前它会将控件上的所有约束全部移除,在设置新约束。
关键代码如下:
- (void)viewDidLoad {
[super viewDidLoad];
// 创建 red button
UIButton *redButton = [[UIButton alloc] init];
redButton.backgroundColor = [UIColor redColor];
[self.view addSubview:redButton];
self.redButton = redButton;
[self.redButton addTarget:self action:@selector(click) forControlEvents:UIControlEventTouchUpInside];
// 可以给red button更新初始约束
[self.redButton mas_makeConstraints:^(MASConstraintMaker *make) {
// 约束中点位置为父控件的中点位置
make.center.equalTo(self.view);
// 约束宽高初始值为200
make.width.height.equalTo(@(200));
}];
}
- (void)click {
// 移除控件上的所有约束,再重新设置约束
[self.redButton mas_remakeConstraints:^(MASConstraintMaker *make) {
// 约束中点位置为父控件的中点位置
make.center.equalTo(self.view);
// 约束宽度不变,仍为200
make.width.equalTo(@(200));
// 约束高度变为50
make.height.equalTo(@50);
}];
// 开始执行动画,设置约束
[UIView animateWithDuration:1.0 animations:^{
[self.view layoutIfNeeded];
}];
}
设置新约束:mas_remakeConstraints。
它会移除之前的约束,再设置新约束。
注意:当约束更新的时候,要想动画执行约束,必须执行layoutIfNeeded方法来执行动画。