添加UIView并使用autolayout重新计算约束

时间:2015-05-07 06:33:37

标签: ios objective-c uiview autolayout

我需要你的帮助才能做到这一点:

我有一个宽度等于屏幕宽度的视图。在这个视图中,我有2个子视图,宽度为父视图的1/2,方面1:1,因此父视图的高度应该等于子视图的高度。

enter image description here

之后我需要执行动画,它应该向父视图添加另一个视图并转换整个屏幕,如下所示:

enter image description here

我应该以编程方式使用autolayout来实现这一目标吗?如何让这种行为更容易?

2 个答案:

答案 0 :(得分:2)

你可以......

首先,我不会将它们作为父视图的一半,而是:

  • 将左视图的左边框设置为父视图的左边框。
  • 将右视图的右边框设置为父视图的右边框。
  • 设置左视图和右视图之间的水平空间= 0.
  • 在左视图和右视图之间设置相等的宽度约束。

然后当您添加新视图时,

  • 删除右视图的右边框约束。
  • 将新视图的右边框设置为父视图的右边框。
  • 设置右视图和新视图之间的水平空间= 0.
  • 在右视图和新视图之间设置相等的宽度约束。

然后致电

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

请注意,如果默认只有两个视图,您可以通过storyboard添加第一组约束(这比以编程方式更容易)。您可以通过编程方式执行其余操作:See Apple documentation

就个人而言,我喜欢这种方法,因为你不需要对视图的大小或位置进行任何数学运算 - autolayout会为你解决这个问题。

答案 1 :(得分:1)

最简单的方法是。

  • 在设计时(故事板)中,在父视图中添加3个视图。
  • 对于所有子视图(视图1,2和3),创建宽度约束并为其创建出口。当为所有视图完成设计时,将0设置为第三个视图宽度约束的常量。
  • 为视图控制器实现“viewDidLayoutSubviews”方法,如下所示。

    - (void)viewDidLayoutSubviews {
      [super viewDidLayoutSubviews];
    }
    
  • 在此方法中,找到父视图的当前宽度,并将其存储在变量“X”中。

  • 首次加载视图时,请将宽度约束的常量设置为第一个和第二个视图的x / 2.

  • 当第3个视图准备好显示时,为动画块内的所有三个视图设置宽度约束的常量为x / 3.