Masonry

2018-03-11  本文已影响8人  sjtupt

基本原理

源码解析

以及@property (nonatomic, strong, readonly) MASViewAttribute *mas_left;等布局属性。

mas_makeConstraints实现:
- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *))block {
    self.translatesAutoresizingMaskIntoConstraints = NO;
    MASConstraintMaker *constraintMaker = [[MASConstraintMaker alloc] initWithView:self];
    block(constraintMaker);
    return [constraintMaker install];
}

方法内部会先创建一个MASConstraintMakermaker,并将此maker传入block执行,生成一堆layoutConstraints,最后在将layoutConstraints添加到对应的视图中。

mas_updateConstraintsmas_remakeConstraintsmas_makeConstraints类似,只是分别会设置makerupdateExistingremoveExisting属性。有啥用???

mas_left等布局属性:
- (MASViewAttribute *)mas_left {
    return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeLeft];
}

生成一个对应MASViewAttribute 对象。MASViewAttribute这个类其实就是view和属性的一个包装而已。

left属性

- (MASConstraint *)left {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeft];
}

调用

- (MASConstraint *)addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute {
    return [self constraint:nil addConstraintWithLayoutAttribute:layoutAttribute];
}

size属性

- (MASConstraint *)addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute {
    return [self constraint:nil addConstraintWithLayoutAttribute:layoutAttribute];
}
上一篇下一篇

猜你喜欢

热点阅读