现在有这么个需求:
点击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自身的高度约束
然后代码如下
- (IBAction)tapToAutoLayout:(UIButton *)sender {
sender.selected = !sender.selected;
self.View1Height.constant = sender.isSelected?0.:50.;
}
- 完美解决!如果觉得动作太生硬还可以加入动画
[UIView animateWithDuration:1 animations:^{
[self.view layoutIfNeeded];
}];