我以前从未与自动布局约束条件一起工作过。我正在开发一个小型的新应用程序,注意到 NIB 视图默认使用自动布局。因此,我想利用这个机会来尝试并理解苹果对此的意图。
第一个挑战:
我需要调整一个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;
}];
如果一个相邻视图被更新(在我的情况下是通过[myUISegmentedControl setTitle:newTitle forSegmentAtIndex:0]
更新了UISegmentedControl的标题),那么MKMapView会“捕捉”回其原始高度。
因此,我认为我想要做的是改变MKMapView的约束条件,将其从等于父视图的高度改为相对于它曾经覆盖的UISegmentedControl顶部的约束: V:[MKMapView]-(16)-[UISegmentedControl]
。
我想要的是MKMapView的高度缩短,以便露出地图视图下面的一些控件。为此,我认为需要将约束条件从固定的全尺寸视图更改为底部约束到UISegmentedControl的顶部的视图之一...而且我希望它在视图缩小时以动画形式出现。
如何实现这个过程?
编辑 - 尽管视图底部立即向上移动了170,但这个动画没有执行。
[UIView animateWithDuration:1.2f
animations:^{
self.nibMapViewConstraint.constant = -170;
}];
并且 nibMapViewConstraint
在 IB 中与底部垂直间距约束相连。