AutoLayout小技巧系列(一)

AutoLayout小技巧系列(一)_第1张图片

现在有这么个需求点击button,view1消失,View2自动顶上去贴着button,再点击一次View1出现,界面还原成上图。其实这功能很常见,比如点击后显示因为篇幅过长而未显示的Tip,再次点击隐藏。

  • 在绝对布局时代 我们需要将View1 RemoveFromSuperView或者hidden = YES或者alpha=0 (总之不可见),然后调整View2的位置。
  • autoLayout抛弃了Frame,那我们怎么做呢?
解决方案
  • 我想出两种方案
    1.第一种参考叶神的,见链接,View2与button之间建立一个垂直距离为0的约束,但是View2与View1之间也有0距离的约束,肯定会有错误怎么办,不要怕,将新加的这条约束的优先级改为750(低于1000即可),ok错误消失。
    接下来,拖动View2 到View1边距的这条约束到.h文件中,如图
    AutoLayout小技巧系列(一)_第2张图片

    然后点击代码如下
    - (IBAction)tapToAutoLayout:(UIButton *)sender {
    sender.selected = !sender.selected;
    self.View2ToView1.priority = sender.isSelected?500:1000;
    }
    然后大家会发现,模拟器华丽丽的crash了,这是因为autoLayout本身的一个特性,当初始优先级为1000的时候,改变会有问题,那我们将它初始改为999不就完事了吗,同样的 代码中的1000也要改变。

2.第二种方案利用View1自身的高度约束

上面那个view2与button之间的约束就不用建立啦,将View1自身高度的约束(前提是定高,本文定高是50)拖出来,如图
AutoLayout小技巧系列(一)_第3张图片

然后代码如下

- (IBAction)tapToAutoLayout:(UIButton *)sender {
sender.selected = !sender.selected;
self.View1Height.constant = sender.isSelected?0.:50.;
}

  • 完美解决!如果觉得动作太生硬还可以加入动画
    [UIView animateWithDuration:1 animations:^{
    [self.view layoutIfNeeded];
    }];

嘿嘿,下次见。

你可能感兴趣的:(AutoLayout小技巧系列(一))