当前位置: 首页 > 知识库问答 >
问题:

iOS:如何对新的自动布局约束(高度)进行动画处理

越英韶
2023-03-14

我以前从未使用过自动布局约束。我有一个新的小应用程序,我正在开发,并注意到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;
}];

...然后,每当更新同级视图时,MKMapView将“捕捉”回其原始高度(在我的例子中,UISegmentedControl的标题正在更新[myUISegmentedControl setTitle:newTitle forSegmentAtIndex:0])。

所以,我想我要做的是将MKMapView的约束条件从等于父视图的高度更改为相对于它所覆盖的UISegmentedControl的顶部:V:[MKMapView]-(16)-[UISegmentedControl]

我想要的是MKMapView高度缩短,以便显示地图视图下的一些控件。要做到这一点,我认为我需要将约束从固定的全尺寸视图更改为将底部约束到UISegmentedControl顶部的视图。。。我希望它能随着视图缩小到新的大小而产生动画效果。

这是怎么回事?

编辑-此动画不是动画,尽管视图的底部确实立即向上移动170:

    [UIView animateWithDuration:1.2f
         animations:^{
             self.nibMapViewConstraint.constant = -170;

    }];

nibmappviewConstraint在IB中连接到底部垂直空间约束。

共有3个答案

步博艺
2023-03-14

苹果自己有一个非常好的教程,解释了如何使用自动布局动画。按照这个链接,然后找到名为“示例自动布局”的视频。它给出了一些关于自动布局的有趣内容,最后一部分是关于如何使用动画的。

萧秋月
2023-03-14

这对我来说很有用(iOS7和iOS8)。单击要调整的自动布局约束(在界面生成器中,例如顶部约束)。接下来,让它成为一个出口;

@property (strong, nonatomic) IBOutlet NSLayoutConstraint *topConstraint;

向上活跃;

    self.topConstraint.constant = -100;    
    [self.viewToAnimate setNeedsUpdateConstraints]; 
    [UIView animateWithDuration:1.5 animations:^{
        [self.viewToAnimate layoutIfNeeded]; 
    }];

将动画设置回原始位置

    self.topConstraint.constant = 0;    
    [self.viewToAnimate setNeedsUpdateConstraints];  
    [UIView animateWithDuration:1.5 animations:^{
        [self.viewToAnimate layoutIfNeeded];
    }];
闻人嘉木
2023-03-14

更新约束后:

[UIView animateWithDuration:0.5 animations:^{[self.view layoutIfNeeded];}];

self.view替换为对包含视图的引用。

 类似资料:
  • 我注意到在iOS10 Beta 5(即将尝试Beta 6)中,AutoLayout约束动画的行为有点不同。 例如,此方法的工作原理与以前的iOS版本不同: 。。。在我的测试中,最初用添加约束(addConstraints)添加的约束也将在iOS 10中用UIView(UIView)来设置动画(animateWithDuration)(block)。。。到目前为止,这导致了一些古怪/不受欢迎的行为。

  • 在我的应用程序中,我正在为视图的高度约束设置动画,当高度约束更改时,视图会向下平移一段时间,尽管我将约束设置为0。下面是我用来设置更改动画的代码: 下面是创建所有可扩展视图的方法: 对我来说,问题不在于如何设置高度变化的动画,因为这是可行的,而在于解决一个事实,即在一段时间内,应用程序似乎忽略了顶部的约束。这是显示动画的gif

  • 我刚开始更彻底地使用AutoLayout,遇到了一个大问题: 我有一个视图,其中一些子视图附着在其顶部,一些子视图附着在其底部,因此当视图的高度发生变化时,子视图会相应地移动。根据用户的操作,子视图的高度可以更改(=其高度约束值更改),这可能会导致它们不再适合其父视图。 如何确定一组新的约束是否需要更改父视图的高度以适应其所有子视图?最好在我显示具有新约束的所有字段之前-我希望视图的高度同时改变。

  • 关于UITableViewCell高度动画,在堆栈溢出方面有很多类似的问题,但对于新的iOS8自动布局驱动的表视图,这些问题都不起作用。我的问题: 自定义单元格: 注意旋转木马高度限制。这是内容视图的子视图(唯一的子视图)的高度约束。 然后,在“查看我要展开的所有操作”单元上,我的代码: 如您所见,我尝试使用这个很好的旧解决方案: 您可以在选中UITableViewCell时设置高度更改的动画吗?

  • 我在学习教程中的动画自动布局 http://weblog.invasivecode.com/post/42362079291/auto-layout-and-core-animation-auto-layout-was 一切都很顺利。 当我尝试在我的应用程序中使用这个概念,尝试从下到上设置设置屏幕(UIView)的动画时,当设置屏幕只是一个空的UIView时,效果非常好, 但如果我将UILabel

  • 我是AutoLayout的新手。我已经知道很多关于这个autoLayout的问题和教程,但是我还没有找到我的解决方案。所以提前感谢您的任何帮助。 我的要求是什么? 我必须制作UIView,它将在按下屏幕底部带有动画的按钮后出现在屏幕上。(如键盘)。我使用autoLayout在xib文件中创建了此UIView。到目前为止,我已经这样做了。 在ViewDidLoad中: 在这个视图中,它包含(滚动视图