个人使用Masonry做简单动画的一点坑

因为需求我需要在创建一个View的同时让它以动画的形式展现出来.
在他的底部不变的同时 改变他的高度.

因为这个View的内部也是使用masonry布局然后自动撑起高度的
我个人是在创建的时候给个约束 然后在View的内部布局完成后再给个新的约束

因为设置的约束并不会立即生效,所以我们需要用layoutIfNeeded来对其强制更新,再首次约束和让其开始动画的时候都得更新一次,否则动画的效果会很奇怪.

但是因为我View的高度是内部控件撑起的但是在第一次View的高度设置为0的时候 你是无法得到内部撑起的高度的.

所以我的实现是将他的高度约束记录下来

然后在之后直接进行卸载就行了

@property (strong, nonatomic)  testView *views;
//views的高度约束
@property (nonatomic, strong) MASConstraint *viewsH;

- (void)viewDidLoad {
    [super viewDidLoad];
    _views = [[testView alloc]init];
    _views.backgroundColor = [UIColor redColor];
    [self.view addSubview:_views];
    
    [_views mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.bottom.right.equalTo(self.view);
        //记录约束
        self.viewsH = make.height.mas_equalTo(0);
    }];
    [self.view layoutIfNeeded];
    //卸载约束
    [self.viewsH uninstall];
    [UIView animateWithDuration:1 animations:^{
         [self.view layoutIfNeeded];
    }];
}

但是这样的话因为你开始设置的高度是0 所以会和控件内部的约束发生冲突.
因为你是外部设置高度 所以可以设置内部高度的优先级 这样就可以实现了

如果有人看得到的话知道更好的做法的话求分享一下

你可能感兴趣的:(个人使用Masonry做简单动画的一点坑)