Masonry 通过 UIView 起动画时出现约束冲突,并且没有动画

概述

使用 UIView 起动画,通过 Masonry 设置的约束

+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion;

发现了两个问题

  1. 并没有动画效果
  2. Masonry 报问题:约束有冲突

原因

经过观察代码发现

  1. UIView 在使用 Masonry 设置约束时,当起动画时,需要在 animations Block 中调用 [self layoutIfNeeded] 刷新 superView
  2. 在 UIView animation 中需要使用 Masonry mas_remakeConstraints 更新约束,否则就会报 “约束冲突”的问题,因为 mas_makeConstraints 只负责新增约束,不能同时存在两条针对于同一对象的约束

其他

mas_updateConstraintsmas_remakeConstraints 的区别

  • update 会更新约束,如果出现有相同的约束方法,只是值不同,则会直接使用新的约束
  • remake 会清除掉之前的约束,重新设置约束

你可能感兴趣的:(Masonry 通过 UIView 起动画时出现约束冲突,并且没有动画)