【发布时间】:2012-10-29 01:46:31
【问题描述】:
我以前从未使用过 autolayout 约束。我有一个正在开发的小型新应用程序,并注意到 NIB 的视图默认为自动布局。所以,我想我会借此机会与一起工作,并尝试弄清楚 Apple 的发展方向。
第一个挑战:
我需要调整 MKMapView 的大小,并且想将其动画到新位置。如果我按照我习惯的方式这样做:
[UIView animateWithDuration:1.2f
animations:^{
CGRect theFrame = worldView.frame;
CGRect newFrame = CGRectMake(theFrame.origin.x, theFrame.origin.y, theFrame.size.width, theFrame.size.height - 170);
worldView.frame = newFrame;
}];
...然后,每当兄弟视图更新时,MKMapView 将“快速”恢复到其原始高度(在我的情况下,UISegmentedControl 的标题正在更新[myUISegmentedControl setTitle:newTitle forSegmentAtIndex:0])。
所以,我认为我想要做的是将 MKMapView 的约束从等于父视图的高度更改为相对于 UISegmentedControl 的顶部 /em> 覆盖:V:[MKMapView]-(16)-[UISegmentedControl]
我想要的是缩短 MKMapView 的高度,以便显示地图视图下方的一些控件。为此,我认为我需要将约束从固定的全尺寸视图更改为底部被约束到 UISegmentedControl 顶部的约束......并且我希望它作为视图进行动画处理缩小到新尺寸。
这是怎么做的?
编辑 - 这个动画不是动画虽然视图的底部确实立即向上移动了 170:
[UIView animateWithDuration:1.2f
animations:^{
self.nibMapViewConstraint.constant = -170;
}];
nibMapViewConstraint 在 IB 中连接到底部垂直空间约束。
【问题讨论】:
-
我知道您可以在 [UIView animateWithDuration..] 块中轻松更改约束的常量值以动画化高度变化。您需要为该约束创建一个 IBOutlet 并将其连接到您的 xib 中,或者如果您在代码中创建它,则保留对它的引用(或遍历所有约束以查找它)。不知道如何为相关更改设置动画,但我读过你应该只更改常量而不是约束的其他值(对于其他值,创建一个新的约束)。
-
嗯。以为我可以,但我不是动画。它成功更改并位于动画块中,但没有动画!?!
-
在这里找到我的答案:stackoverflow.com/questions/12926566/…>
-
别忘了[view layoutIfNeeded],那也是我的问题哈哈。这与解决我的问题的问题相同。
标签: ios uiview autolayout nslayoutconstraint