remake通常是重新布局使用,比如我用cell展示列表,title放在图片的右边,现在有一种情况,需要title在中间,相对布局变化了
可以看到我整个cell,上面是正常情况,下面是查询失败的记录,失败的时候车标图要跑到前面去,其他的隐藏好做就不说了。
上面的正常情况,布局时车标图片是以前面的图片为标准,放的位置是最左边的图片使用:
[_brandImage mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo(_logoImage);
make.left.mas_equalTo(_logoImage.mas_right).offset(W(15));
make.size.mas_equalTo(CGSizeMake(W(30), H(30)));
}];这种,当下面的情况发生时,使用:
[_brandImage mas_remakeConstraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo(_centerView);
make.left.mas_equalTo(_centerView.mas_left).offset(W(15));
make.size.mas_equalTo(CGSizeMake(W(30), H(30)));
}];
然后运行。发现masonry报错。不会崩溃,不影响布局,但是会有很多的警告,提示brandimage在centerview的right距离15,然后又变成了logoimage的right距离15,造成布局冲突,需要你来解决。
可以看到,上面正常布局的时候以logoimage为基准,下面变成了以centerview为基准,要想改正这个错误,只要把上下统一以一个控件为基准,不管布局如何变化,始终以一个坐标物作为参照就可以,改正如下:
cell的初始布局,正常情况时:
[_brandImage mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo(_logoImage);
make.left.mas_equalTo(_centerView.mas_left).offset(W(70));
make.size.mas_equalTo(CGSizeMake(W(30), H(30)));
}];
当出现意外情况时:
[_brandImage mas_remakeConstraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo(_centerView);
make.left.mas_equalTo(_centerView.mas_left).offset(W(15));
make.size.mas_equalTo(CGSizeMake(W(30), H(30)));
}];
这样警告就消失了。这是使用masonry布局时易犯的错误,记录下来以便以后不犯。
其他个人博客:http://zhangqq166.cn/