UILabel在使用autolayout时无法在UIView内部进行动画。

3

我有一个非常简单的应用程序。里面包含一个红色视图和一个绿色标签。还有一个按钮来运行动画。我通过更改宽度约束常量的值来对红色视图进行动画处理。

[self.view layoutIfNeeded];
[UIView animateWithDuration:0.4 animations:^{    self.widthConstraint.constant = width;    [self.view layoutIfNeeded];
}];

红色视图按预期进行动画,但内部的绿色标签立即改变其宽度。我尝试了不同的动画标志,尝试了 SO 上的几个提示,但都没有解决问题。

请在此处找到源代码:点击这里

TIA

2个回答

8
似乎我找到了问题的根源。限制条件不是问题,而是UILabel问题所在。
如果您用简单的UIView替换我的项目中的UILabel,它将如预期般流畅地进行动画。这是关于UILabel内容动画的问题。可以通过设置label.contentMode = UIViewContentModeCenter来达到正确的动画行为,但看起来很丑陋。
解决这个问题的最佳方式-不要在动画过程中尝试更改UILabel的大小。尝试发掘一些其他行为。在我的情况下,我将UILabel的alpha更改为0,并将x位置更改为大于容器视图的宽度。 有关UILabel动画的更多详细信息,请单击此处

0
我已经看了一下你的项目。我在编辑器中设置约束方面的经验不是很丰富,但如果遇到问题,我强烈建议你在代码中尝试进行设置。就个人而言,我会对这个红色视图的宽度进行约束动画,并使用可视化格式在标签的边距上设置约束,如@"H:|[label]|",并将此约束添加到红色视图上。这应该能解决问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接