您的位置:首页 > 其它

masonry 使用remake时容易犯的一种错误

2018-01-08 16:29 162 查看
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布局时易犯的错误,记录下来以便以后不犯。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: