AutoLayout小技巧系列(一)

作者: ColeX | 来源:发表于2015-11-06 12:14 被阅读1224次

现在有这么个需求点击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];
    }];

嘿嘿,下次见。

相关文章

  • AutoLayout小技巧系列(一)

    在绝对布局时代 我们需要将View1 RemoveFromSuperView或者hidden = YES或者al...

  • AutoLayout小技巧系列(二)

    同事小周丢来一个需求,如图 要求 label1和label2等宽多行 ** label3的位置 由label1和l...

  • Autolayout小技巧

    iOS开发UI一直是一个问题,当年用代码画UI一度成为流行趋势,相信代码能万能解决问题,而且十分简单。 然而,现在...

  • iOS9自动布局神器StackView

    这篇文章紧跟上边autolayout的一些小技巧,如果你没有看过,不防先看下《你真的会用autolayout...

  • 一个Autolayout的调试技巧

    一个Autolayout的调试技巧 当视图的Autolayout出现问题的时候,可以在Xcode添加一个UIVie...

  • iOS-AutoLayout的初级教程

    在学习AutoLayout时看过很多小技巧,但是很少有介绍基础的教程,最近总结这类文章,看到一篇国外的文章极佳,特...

  • Masonry使用的一个小技巧

    今天在Masonry:使用纯代码进行iOS应用的autolayout自适应布局看到了这样一个小技巧,发现之前写的一...

  • iOS中autolayout一个小技巧

    简书上讲autolayout的文章很多,但大多数是从理论上来讲的,我这里说一个平时开发中常见到的一种需求,先...

  • 你真的会用autolayout吗?

    由于前一段时间封闭开发的原因,生物钟没有调节过来,这个点比较精神,写一篇autolayout的小技巧,仅供学习...

  • Autolayout调试奇淫巧技&&Reveal

    3-4 Views--先进的自动布局工具箱Autolayout BreakpointsReveal调试技巧

网友评论

  • 50a3732451c9:如果是纯代码实现是怎么实现的,求指教
  • cd1fcb172f50:现在在约束下,想做动画或调整布局,这个xxx.constant很好用呀
  • 98ba33deeaa9:虽然不懂,但看起来好像挺厉害的样子:sunglasses:
  • HaibaraAii:如果用stack view实现的话,应该更容易吧
    HaibaraAii:@ColeXm 能否详细说下stack view 有什么缺点呢
    ColeX:@HaibaraAii 我去研究下,多谢建议。
    ColeX:@HaibaraAii stack view优点很多,缺点也有,不是所有项目都用的吧…
  • 1f96888dd4a9:叶神是谁?他有写文章吗?
    ColeX:@SmallCode 叶孤城,人称代码届吴彦祖哈哈
  • 国王or乞丐:如果是多个view1隐藏,不知道该怎么去写,希望多指导
    csqingyang:如果是多个view ,可以考虑分组的方法进行解决。多个小视图一起被隐藏 就将这些小视图组合放在一个大的视图上 然后使用方法2控制这个大视图的约束变化即可。有点像stackView
    ColeX:@ios蠢才 应该是一样的写法。参照方法2
  • pzb:你好,我大概看了一下,还没试,如有不懂的问你一下喽?还有如果有关于其他好的autolayout的知识,能否多指点小弟一下,或者你发表一下,让我们看看,非常感谢!
    ColeX:好的,谢谢。
  • Liberalism:效果看起来挺好的,可能是我驽钝,没有看太明白,晚上研究一下吧,加油,希望有更好的文章
    ColeX:@耿志强 好的,如果有描述不清楚的地方,请指教。

本文标题:AutoLayout小技巧系列(一)

本文链接:https://www.haomeiwen.com/subject/dvdchttx.html