2014-10-27 64 views
3

我有一个非常简单的应用程序。它包含一个红色视图和一个绿色标签。还有一个运行动画的按钮。我通过改变其宽度约束常量的值来动画红色视图。UILabel不在UIView内部设置动画,使用自动布局

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

红色视图按预期动画,但内部的绿色标签立即改变其宽度。我玩了不同的动画标志,尝试了几个来自SO的提示,但没有启用它。

请发现the sources here

TIA

回答

7

看来我已经找到了问题的根源。约束不是一个麻烦,UILabel是。

如果您在我的项目中使用简单的UIView来代替UILabel,它将按预期顺利进行动画处理。这是一个内容动画UILabel的问题。你可以达到正确的动画行为集label.contentMode = UIViewContentModeCenter,但它看起来很丑。

解决此问题的最佳方法 - 不要在动画过程中更改大小UILabel。尝试发明一些其他行为。在我的情况下,我将UILabel的alpha更改为0和x的位置,使其大于容器视图的宽度。

请找到UILabel动画here更多细节。

0

我看了看你的项目。我没有太多的编辑器设置约束的经验,但我会强烈建议你在出现问题时尝试使用代码。就我个人而言,我会对这个红色视图的宽度设置动画约束,并使用可视化格式在标签边距上设置约束条件,如下所示:@"H:|[label]|"并将此约束添加到红色视图。这应该可以解决问题。