一点Masonry的使用技巧

作者: 151ba12c22e5 | 来源:发表于2016-02-05 20:31 被阅读543次

      先假设一个场景。在cell复用的时候,有一个UILable的位置是需要根据数据来确定这个label是距离cell的top 10个像素,还是距离cell的bottom10个像素。有了这个需求,我们先来想几个备选方案。

    1、重写layoutSubviews每次都重写label的mas_updateConstraints

    make.top.equalTo(self.mas_top).offset(10)

    或是

    make.bottom.equalTo(self.mas_bottom).offset(-10)(根本行不通)

    2、重写layoutSubviews每次都重写label的mas_remakeConstraints然后重新写布局(性能有影响)

    ok,说一下我的解决方案。

    在init方法里先写好一种无论是top还是bottom,同时把这个约束记录下来

    @property(nonatomic,strong)MASConstraint*labelConstraint;

    [self.tipLabelmas_makeConstraints:^(MASConstraintMaker*make) {

    make.left.equalTo(self.mas_left).offset(20);

    make.right.equalTo(self.mas_right).offset(-20);

    self.labelConstraint= make.top.equalTo(self.mas_top).offset(10);

    }];

    好了,重点来了。

    每次先卸载top或是bottom的布局(并不清楚卸载这次词用的对不对),然后再重写布局。举一反三这个小技巧可以解决很多问题

    恬不知耻的放一波github  https://github.com/timelessg

    相关文章

      网友评论

      • UItachi:update还能修改这样的constraint offset,头一次看到; remake如何非常影响性能?
        151ba12c22e5:@UItachi 还有一种场景,一次性需要卸载很多view约束的时候,可以把constraint都丢到一个array里循环去uninstall,再添加新的约束。至于性能的问题我还没有仔细探究过实现,只是在跑instrument的时候看了一下
      • 十万::flushed::flushed:缘分啊小棉袄

      本文标题:一点Masonry的使用技巧

      本文链接:https://www.haomeiwen.com/subject/arxykttx.html