动画 UIView 框架不尊重约束?
Posted
技术标签:
【中文标题】动画 UIView 框架不尊重约束?【英文标题】:Animating UIView frame doesn't respect constraints? 【发布时间】:2014-02-27 10:20:07 【问题描述】:我想要实现的是当我点击按钮时,动画框架将调整大小,这样底线位置不会改变,高度会降低。这部分正在发生。我还希望上部标签与框架的上边界一起向下移动,下部标签保持不变。所以我在 IB 中设置了约束,使下部标签的垂直空间为 20 像素,优先级为 1000。
- (IBAction)tapTap:(id)sender
//[self.containerView layoutIfNeeded];
[UIView animateWithDuration:1.5 animations:^
CGRect rect = CGRectOffset(self.containerView.frame, 0, 30);
rect.size.height -= 30;
self.containerView.frame = rect;
//[self.containerView layoutIfNeeded];
completion:NULL];
较低的标签也具有动画效果,不会保持不变。在尝试 layoutIfNeeded
后我最好的猜测是,我在动画帧时不能依赖约束。如果是真的,有什么解决办法?
【问题讨论】:
好的,我真的不应该直接触摸框架,而是使用约束设置动画! 【参考方案1】:AutoLayout 的第一条规则:不要触摸框架(或中心)。
看起来您已经找到了答案,但这样做的方法是保留对您想要更改的约束的引用。例如,如果您想上下移动视图,则存储一个垂直约束来设置视图上的垂直位置。现在,当您对该约束进行动画处理时,视图将使用它进行动画处理。
self.topConstraint.constant = 50;
// etc...
您可以通过 CTRL 拖动来创建对约束的属性引用,就像使用按钮、标签等...
【讨论】:
以上是关于动画 UIView 框架不尊重约束?的主要内容,如果未能解决你的问题,请参考以下文章