因为需求我需要在创建一个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 所以会和控件内部的约束发生冲突.
因为你是外部设置高度 所以可以设置内部高度的优先级 这样就可以实现了
如果有人看得到的话知道更好的做法的话求分享一下