Ios 是否临时删除NSLayoutConstraint?

Ios 是否临时删除NSLayoutConstraint?,ios,objective-c,uitableview,autolayout,Ios,Objective C,Uitableview,Autolayout,我有一个使用AutoLayout布局的UITableViewCell子类,我想要一个小动画,其中图像视图进行变换,稍微增长,然后收缩回来 目前,由于这些限制,图像右侧的标签也在移动(应该是这样的) 我想用一种简单快捷的方式暂时说“在动画运行时,将这些标签保留在当前位置”。这是我不需要删除和重新添加这些约束就可以做到的吗?这是一件非常麻烦的事情?没有API可以说“将这些视图留在这里”,暂时禁用自动布局的某些部分。有几种可能的解决方案: 在动画期间删除约束 以不同的方式排列约束(例如,将约束设置为

我有一个使用AutoLayout布局的
UITableViewCell
子类,我想要一个小动画,其中图像视图进行变换,稍微增长,然后收缩回来

目前,由于这些限制,图像右侧的标签也在移动(应该是这样的)

我想用一种简单快捷的方式暂时说“在动画运行时,将这些标签保留在当前位置”。这是我不需要删除和重新添加这些约束就可以做到的吗?这是一件非常麻烦的事情?

没有API可以说“将这些视图留在这里”,暂时禁用自动布局的某些部分。有几种可能的解决方案:

  • 在动画期间删除约束
  • 以不同的方式排列约束(例如,将约束设置为图像视图的超级视图,或使其仅取决于图像视图的中心)
  • [super layoutSubviews]
    中运行autolayout后,覆盖容器视图的layoutSubviews以将标签粘贴回所需位置(或删除图像视图的转换,运行autolayout,然后将其放回原处)
  • 对图像视图进行子类化,并覆盖
    frameForAlignmentRect:
    alignmentRectForFrame:
    以获得自动布局,以便使用未转换的框架进行对齐

这里的答案中提供了更多详细信息和建议,这是一个如何使转换和自动布局一起发挥作用的类似问题:

从iOS 8开始
NSLayoutConstraints
现在有一个
active
属性,您可以更改
myConstraint.active=NO。这将删除该约束,同时将该值设置为
YES
将[重新]添加该约束:

激活或停用约束将调用addConstraint:和 removeConstraint:在视图上,该视图是 此约束管理的项。使用此属性而不是 直接调用addConstraint:或removeConstraint:。

此外,还有两个新的类方法
activateConstraints:
deactivateConstraints:
,它们接受一个约束数组(
NSArray
),因此这会很有帮助,特别是当您有一个带有约束的
IBOutletCollection


[NSLayoutConstraint停用约束:myConstraints]

这是一个很好的答案,但谢天谢地,我并不需要它。我用
CABasicAnimation
代替UIView动画,因为它们不会触发布局更改。@lukech这是一个选项,但要小心,如果在动画过程中有任何其他原因导致布局,您将返回到与开始时相同的错误。