暂时删除NSLayoutConstraint?

时间:2014-07-07 10:37:58

标签: ios objective-c uitableview autolayout

我有一个使用AutoLayout布局的UITableViewCell子类,我想要一个小动画,其中图像视图会变换,变长并缩小。

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

我想要一种快速简便的方法暂时说“在这个动画运行时将这些标签保留在当前位置”。这是我可以做的事情,而不需要删除和重新添加这些约束,这是很麻烦?

2 个答案:

答案 0 :(得分:5)

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

  

激活或取消激活约束调用addConstraint:和   removeConstraint:在最接近的共同祖先的视图上   由此约束管理的项目。使用此属性而不是   直接调用addConstraint:或removeConstraint:   source

此外,有两个新的类方法activateConstraints:deactivateConstraints:采用一系列约束(NSArray<NSLayoutConstraint>),因此这可能会有所帮助,特别是如果你有一个{{1有约束。

IBOutletCollection

答案 1 :(得分:1)

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

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

此处的答案中提供了更多详细信息和建议,这是关于如何使变换和自动布局一起进行的类似问题:How do I adjust the anchor point of a CALayer, when Auto Layout is being used?