美文网首页
requiresConstraintBasedLayout

requiresConstraintBasedLayout

作者: 哥只是个菜鸟 | 来源:发表于2020-08-29 13:22 被阅读0次

    看到很多Autolayout写的自定义控件中都实现了+requiresConstraintBasedLayout方法,一直不知道这个方法有什么用,因为不实现这个方法也没发现有什么影响。经过查找资料,有解释如下:

    constraint-based layout engages lazily when someone tries to use it (e.g., adds a constraint to a view). If you do all of your constraint set up in -updateConstraints, you might never even receive updateConstraints if no one makes a constraint. To fix this chicken and egg problem, override this method to return YES if your view needs the window to use constraint-based layout.

    意思就是基于约束的布局是懒触发的,只有在添加了约束的情况下,系统才会自动调用 -updateConstraints 方法,如果把所有的约束放在 updateConstraints中,那么系统将会不知道你的布局方式是基于约束的,所以 重写+requiresConstraintBasedLayout 返回YES就是明确告诉系统:虽然我之前没有添加约束,但我确实是基于约束的布局!这样可以保证系统一定会调用 -updateConstraints 方法 从而正确添加约束.

    + (BOOL)requiresConstraintBasedLayout {
        return YES;
    }
    
    - (void)updateConstraints{
        [super updateConstraints];
        [self.backImageView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.equalTo(self).offset(16.f);
            make.width.offset(80.f);
            make.height.offset(65.f);
            make.centerY.equalTo(self);
        }];
    

    相关文章

      网友评论

          本文标题:requiresConstraintBasedLayout

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