2014-01-21 66 views
8

我正面临一个问题。我正在开发应用程序,我正在使用storyboardAutolayout已启用。现在我的UIViewControllers之一,我已经放置了一个UIView(说A)。现在A有多个子视图(准确地说是UIViews)。我已对A应用了“Horizontally and Vertically centered”约束.A内的子视图对它们没有任何约束。使用自动布局重置UIView帧

现在在我的代码,我有动画是A.里面里面那个方法我称之为UIView's动画方法子视图的方法...

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

和动画子视图的内观A.之一现在问题是这些帧变化不会持续。当我在当前视图控制器上对视图控制器进行模式设置,然后解除它时,A中所有子视图的帧都会被重置。

我搜索了一下,发现了问题,因为自动布局存在的。我禁用了它,然后再次尝试,一切运行良好。

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

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

有趣的是,在计算器上很多帖子建议

使用自动布局时,我们应该动画的约束,而不是框架。

但我还没有应用于该是内部视图A.约束子视图的任何约束上查看A.只适用

感谢。

+0

你问了很多东西,其中包括那些令人失望的建议。会建议你将其分成不同的问题,并包括一些支持核心问题的代码示例 –

+0

重置为什么?你如何在第一个地方添加这些视图? – jrturton

回答

17

对于所有您在动画写下面的代码viewDidLoad中

myViewToAnimate.translatesAutoresizingMaskIntoConstraints = YES; 

希望这有助于

+0

用您的自动布局在 –

+0

上做到这一点是的好...我今天会尝试...并让您知道它是否可行...无论如何感谢... –

+0

我试过了。它的工作原理。子视图开始使用自动布局进行动画制作。但它会打印以下警告... 无法同时满足约束条件。下面列表中的至少一个约束可能是你不想要的。试试这个:(1)看看每个约束,并试图找出你不期望的; (2)找到添加不需要的约束或约束并修复它的代码。注意如果您看到您不明白的NSAutoresizingMaskLayoutConstraints,请参阅UIView属性的文档translatesAutoresizingMaskIntoConstraints –

3

原因是自动布局将更新视图到原来的位置的意见。 Autolayout系统将根据布局约束定期设置视图层次结构中每个视图的位置和大小。在viewDidLayoutSubviews代替viewDidLoad摆脱对我的布局约束错误的

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

把它: