Ios 是否临时删除NSLayoutConstraint?
我有一个使用AutoLayout布局的Ios 是否临时删除NSLayoutConstraint?,ios,objective-c,uitableview,autolayout,Ios,Objective C,Uitableview,Autolayout,我有一个使用AutoLayout布局的UITableViewCell子类,我想要一个小动画,其中图像视图进行变换,稍微增长,然后收缩回来 目前,由于这些限制,图像右侧的标签也在移动(应该是这样的) 我想用一种简单快捷的方式暂时说“在动画运行时,将这些标签保留在当前位置”。这是我不需要删除和重新添加这些约束就可以做到的吗?这是一件非常麻烦的事情?没有API可以说“将这些视图留在这里”,暂时禁用自动布局的某些部分。有几种可能的解决方案: 在动画期间删除约束 以不同的方式排列约束(例如,将约束设置为
UITableViewCell
子类,我想要一个小动画,其中图像视图进行变换,稍微增长,然后收缩回来
目前,由于这些限制,图像右侧的标签也在移动(应该是这样的)
我想用一种简单快捷的方式暂时说“在动画运行时,将这些标签保留在当前位置”。这是我不需要删除和重新添加这些约束就可以做到的吗?这是一件非常麻烦的事情?没有API可以说“将这些视图留在这里”,暂时禁用自动布局的某些部分。有几种可能的解决方案:
- 在动画期间删除约束
- 以不同的方式排列约束(例如,将约束设置为图像视图的超级视图,或使其仅取决于图像视图的中心)
- 在
中运行autolayout后,覆盖容器视图的layoutSubviews以将标签粘贴回所需位置(或删除图像视图的转换,运行autolayout,然后将其放回原处)[super layoutSubviews]
- 对图像视图进行子类化,并覆盖
和frameForAlignmentRect:
以获得自动布局,以便使用未转换的框架进行对齐alignmentRectForFrame:
这里的答案中提供了更多详细信息和建议,这是一个如何使转换和自动布局一起发挥作用的类似问题:从iOS 8开始
NSLayoutConstraints
现在有一个active
属性,您可以更改myConstraint.active=NO代码>。这将删除该约束,同时将该值设置为YES
将[重新]添加该约束:
激活或停用约束将调用addConstraint:和
removeConstraint:在视图上,该视图是
此约束管理的项。使用此属性而不是
直接调用addConstraint:或removeConstraint:。
此外,还有两个新的类方法activateConstraints:
和deactivateConstraints:
,它们接受一个约束数组(NSArray
),因此这会很有帮助,特别是当您有一个带有约束的IBOutletCollection
时
[NSLayoutConstraint停用约束:myConstraints]代码>这是一个很好的答案,但谢天谢地,我并不需要它。我用CABasicAnimation
代替UIView动画,因为它们不会触发布局更改。@lukech这是一个选项,但要小心,如果在动画过程中有任何其他原因导致布局,您将返回到与开始时相同的错误。