使用autolayout时,UIView帧重置

时间:2014-01-21 09:47:46

标签: ios iphone animation uiview autolayout

我正面临一个问题。我正在开发一款应用,我正在使用storyboard并启用了 Autolayout 。现在我的一个UIViewControllers我放了一个UIView(比如说​​A)。现在A有多个子视图(确切地说UIViews)。我在A上应用了“Horizontally and Vertically centered”约束.A中的子视图对它们没有任何限制。

现在在我的代码中我有一个动画A内部子视图的方法。在该方法中我调用UIView's动画方法......

[UIView animateWithDuration: delay: options: animations: completion:];

并在View A中为其中一个子视图设置动画。现在问题是这些帧更改不会持久存在。当我在当前视图控制器上模拟视图控制器然后关闭它时,A中所有子视图的帧都会重置。

我搜索了它,发现由于 Autolayout 而出现了问题。我禁用它,然后再次尝试,一切运作良好。

但启用 Autolayout 的解决方法是什么?

我错过了什么......?

有趣的是,StackOverflow上的很多帖子都提示

  

我们应该在使用自动布局时为约束而不是框架设置动画。

但我没有对View A中的子视图应用任何约束。约束仅适用于View A.

感谢。

3 个答案:

答案 0 :(得分:18)

对于您正在设置动画的所有视图,请在 viewDidLoad

中编写以下代码
myViewToAnimate.translatesAutoresizingMaskIntoConstraints = YES;

希望这有帮助

答案 1 :(得分:3)

原因是Autolayout会将视图更新为原始位置。 Autolayout系统将根据布局约束定期设置视图层次结构中每个视图的位置和大小。

答案 2 :(得分:0)

添加:

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    VIEWTOFIX.setTranslatesAutoresizingMaskIntoConstraints(true)
}

将它放在viewDidLayoutSubviews而不是viewDidLoad中,摆脱了布局约束错误。