我注意到在iOS10 Beta 5(即将尝试Beta 6)中,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(UIView)来设置动画(animateWithDuration)(block)。。。到目前为止,这导致了一些古怪/不受欢迎的行为。
例如,在阵列中设置左/右约束(但在块中设置垂直约束)会使整个视图以对角线方式在屏幕上设置动画。。。这是完全错误的。
有人知道如何正确地为iOS9(及以下)和10做这件事吗?
我做了一个小测试,改变了红色小视图的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];
尝试在视图的superview上调用layoutIfNeeded,而不是视图本身。
--
我有一个类似的问题,我的观点应该从顶部0高度动画,向下到
将Xcode 8与iOS10一起使用,动画行为大不相同。视图不是从顶部向下动画,而是向上动画
我通过在视图本身调用layoutIfNeed
而不是在视图的超级视图上调用它来修复此问题。不知何故,行为被恢复了。
希望有帮助!
根据文档,“layoutIfNeeded”(需要的布局)列出子视图(但不考虑当前视图本身)。因此,为了更新当前视图布局,需要从超级视图调用layoutIfNeeded。
我在学习教程中的动画自动布局 http://weblog.invasivecode.com/post/42362079291/auto-layout-and-core-animation-auto-layout-was 一切都很顺利。 当我尝试在我的应用程序中使用这个概念,尝试从下到上设置设置屏幕(UIView)的动画时,当设置屏幕只是一个空的UIView时,效果非常好, 但如果我将UILabel
我以前从未使用过自动布局约束。我有一个新的小应用程序,我正在开发,并注意到NIB的视图默认为自动布局。所以,我想我会借此机会使用它,并尝试弄清楚苹果公司在这方面的进展。 第一个挑战: 我需要调整MKMapView的大小,并将其设置为新位置的动画。如果我按照我习惯的方式来做: ...然后,每当更新同级视图时,MKMapView将“捕捉”回其原始高度(在我的例子中,UISegmentedControl
我是AutoLayout的新手。我已经知道很多关于这个autoLayout的问题和教程,但是我还没有找到我的解决方案。所以提前感谢您的任何帮助。 我的要求是什么? 我必须制作UIView,它将在按下屏幕底部带有动画的按钮后出现在屏幕上。(如键盘)。我使用autoLayout在xib文件中创建了此UIView。到目前为止,我已经这样做了。 在ViewDidLoad中: 在这个视图中,它包含(滚动视图
我正在使用这段代码,但在iOS10上,它并没有设置动画,只是在增加和减少mySubview1的高度。为什么? 同样的代码在iOS9中工作正常
许多有关自动布局约束动画的教程建议更新约束的常量属性,然后在动画块中调用。 我的处境有点棘手。我有一个包含3个子视图的视图。此超级视图的高度不是固定的-它是按其子视图的高度之和计算的。在某些情况下,我要求这3个子视图中的一个子视图切换其高度(它在0和30之间变化,即我希望平滑地隐藏和显示它)。代码类似于此: 不幸的是,这并不像我预期的那样有效。我可以看到子视图高度的平滑变化,但在为子视图高度约束设
我有一组AL约束来定位一个子vc,它有两个位置,展开和折叠。 我发现,当我添加折叠约束时,带有常量的上锚到下锚约束,当第一次创建vc时,当我激活它时,似乎有额外的间距。似乎是因为当时没有实际的高度。 当我在viewDidLayoutSubviews中添加约束时,额外的间距消失了,约束行为正常。除了现在在动画中的约束之间切换时,切换到展开约束和约束打断时,无法停用折叠的约束。可能是因为在整个过渡动画