在iOS 10中处理AutoLayout约束动画差异?
我注意到,在iOS 10 Beta 5(即将尝试Beta 6)中,AutoLayout约束动画行为有点不同。在iOS 10中处理AutoLayout约束动画差异?
例如,这种方法是行不通的一样,它在以前的iOS版本一样:
[view addConstraints:@[constraints...]];
[view setNeedsUpdateConstraints];
[view layoutIfNeeded];
[UIView animateWithDuration:...
{
/* adjust constraint here... */
[view layoutIfNeeded]; // Only the adjusted constraints since previous layoutIfNeeded() call should animate change with duration.
} completion:{ ... }];
...在我的测试中,最初加入addConstraints()
将也动画在iOS的10约束与UIView animateWithDuration()
块...这是迄今造成一些时髦/不良行为。
例如,设置阵列中的左/右约束(但是块中的垂直约束)导致整个视图在屏幕上以对角线方式以这种方式进行动画......这是完全不正确的。
有谁知道如何正确地为iOS 9(及以下),以及10做到这一点?
尝试在视图的超级视图上调用layoutIfNeeded
,而不是视图本身。
-
我有类似的问题,我的观点是应该在一个0高度从顶部进行动画,向下到> 0高度(即(0,0,320,0)到(0 ,0,320,44))。
在iOS 10中使用Xcode 8时,动画行为有很大的不同。而不是从顶部向下动画,视图从目标框架的垂直中心向下动画&。
我解决了这个问题,而不是在视图本身上调用layoutIfNeeded
,在视图的超级视图上调用它。不知何故,行为已被恢复。
希望它有帮助!通过@Ramiro
帮助的注释:
根据该文件,
layoutIfNeeded
勾画出子视图(但不考虑当前视图本身)。所以,为了更新当前的视图布局,您需要从超级视图调用layoutIfNeeded
。
嗯。我可以尝试一下。根据您的测试,这是否也可以在iOS 9中正常运行? –
嗯,你说得对。似乎这是解决方案!即使在iOS 9中适合我。 –
太棒了,很高兴帮助!行为是不同的,这很奇怪。类似的东西可能适用于表格视图单元格问题的人,尽管我还没有尝试过 – beebcon
我做了一个小测试改变一个红色的小鉴于H和V:
self.red_POS_H = NSLayoutConstraint.constraints(withVisualFormat: "H:|-90-[redView]", options: defaultOptions, metrics: nil, views: viewsDictionary)
self.red_POS_V = NSLayoutConstraint.constraints(withVisualFormat: "V:|-30-[redView]", options: defaultOptions, metrics: nil, views: viewsDictionary)
self.view.addConstraints(self.red_POS_V!)
self.view.addConstraints(self.red_POS_H!)
和动画它:
// we hope is only one:
let currV = self.red_POS_V![0]
let currH = self.red_POS_H![0]
UIView.animate(withDuration: 3) {
// Make all constraint changes here
currV.constant = 100
currH.constant = 300
self.view.layoutIfNeeded() // Forces the layout of the subtree animation block and then captures all of the frame changes
}
红色视图正确地移动,如果你注释掉动画单行它可以水平或垂直工作。
小项目可用,如果你需要它。
在下面的方法:
[super viewDidLoad];
写这行:
[self.view layoutIfNeeded];
我认为这会是更好的方法来放置'[self.view layoutIfNeeded];'在你设置你的用户界面之后,而不是在你的视图加载后。 – BEm
这可能不是有关您的问题,但似乎是与各地的动画为iOS 10个问题。但是,iOS 9和10的语法应该保持不变。问题必须来自iOS 10的新动画对象。 https://forums.developer.apple.com/thread/53602 https://openradar.appspot.com/27679031 – cnotethegr8
我能够解决它的问题,但它并不理想:\ –
您的问题与tableview高度偏移?因为我刚刚为它创建了一个修复程序。如果不是,我的修补程序可能会帮助您,但它涉及从层级应用动画。让我知道,我会把它放在一个答案。 – cnotethegr8