AutoLayout小技巧系列(一)


现在有这么个需求点击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文件中,如图

    然后点击代码如下
    - (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)拖出来,如图

然后代码如下

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

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

嘿嘿,下次见。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容