个人使用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 所以会和控件内部的约束发生冲突.
因为你是外部设置高度 所以可以设置内部高度的优先级 这样就可以实现了

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,297评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,204评论 4 61
  • 第一章 婚姻 1、婚姻是社会组织的一种纽带,从这个角度来看,婚姻在历史的有以下几种演变,同时婚姻的自由度也随着社会...
    天真君阅读 9,312评论 3 0
  • (一) 每次走到食堂那位东北大叔的窗口旁,都想停下来和他说说话。北方的冬,除了宿舍里有暖气,外头总是特别冷的。我又...
    暖之黯泉阅读 3,499评论 0 1
  • 比勤奋更重要的,是深度思考的能力。不论是生活还是工作中,遇到棘手的问题,要想更好的解决处理好,就必须在平日不断的提...
    梅子618阅读 5,431评论 0 6