使用自动布局时,UIView帧会重置
我正面临一个问题。 我正在开发一个应用程序,我正在使用启用了Autolayout的 storyboard
。 现在我的UIViewControllers
之一,我已经放置了一个UIView
(说A)。 现在A有多个子视图( UIViews
是精确的)。 我已经对A应用了“ Horizontally and Vertically centered
”约束.A内的子视图对它们没有任何限制。
现在在我的代码中,我有一个方法来animationA里面的子视图。在那个方法里面我调用UIView's
animation方法…
[UIView animateWithDuration: delay: options: animations: completion:];
并animation的一个子视图的视图A.现在的问题是,这些帧的变化不会持续。 当我在当前的视图控制器上的视图控制器模式,然后解雇它,A内的所有子视图的框架被重置。
我search了它,发现问题是由于Autolayout发生的。 我禁用它,然后再试一次,一切运作良好。
但是,启用Autolayout的解决方法是什么?
我错过了什么…?
有趣的是,StackOverflow上的很多post都提到了这一点
当使用自动布局时,我们应该使约束animation而不是animation。
但是我没有对视图A中的子视图应用任何约束。约束只适用于视图A.
谢谢。
对于所有的animation视图,请在viewDidLoad中写入以下代码
myViewToAnimate.translatesAutoresizingMaskIntoConstraints = YES;
希望这可以帮助
原因是Autolayout会将视图更新到原来的位置。 Autolayout系统将根据布局约束定期设置视图层次结构中每个视图的位置和大小。
添加这个:
override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() VIEWTOFIX.setTranslatesAutoresizingMaskIntoConstraints(true) }
把它放在viewDidLayoutSubviews
而不是viewDidLoad
摆脱了我的布局约束错误。