AutoLayout小技巧系列(二)

作者: ColeX | 来源:发表于2016-01-14 10:51 被阅读1390次

同事小周丢来一个需求,如图


要求

  • label1和label2等宽多行
  • ** label3的位置 由label1和label2的内容决定(谁行高就贴着他的底部)**
  • label1和label2不能被拉大,位置居上显示

那么高潮来了,他给出了他的做法:通过俗套的计算label高度的方式,强行给label3设置约束

我呵呵一笑,既然autoLayout这么方便,那么为啥还要回到frame时代那种又丑又不好用的方式

我的思路

在label3顶部分别给label1 和label2底部拉一根约束,通过判断label1和label2内容高度决定这两个约束的优先级,来决定在哪个label的下方,可能说起来比较抽象,那么上图

  1. 建立这两个约束,分别是label3和label1垂直方向,label3和label2垂直方向的约束(姑且设为0)



2.把这两个约束优先级都设为750(低于1000就行),为啥要低于1000,可以看我之前的AutoLayout小技巧系列(一)


3.判断这label1和label2的内容大小,我这里采取简单粗暴的直接比较字符串长度,然后决定上面两个约束的优先级
BOOL label1LonerThanLabel2 = label1.text.length> label2.text.length;
lcToLabel1.priority = label1LonerThanLabel2?UILayoutPriorityDefaultHigh:UILayoutPriorityDefaultLow;
lcToLabel2.priority = label1LonerThanLabel2?UILayoutPriorityDefaultLow:UILayoutPriorityDefaultHigh;

按理来说,到这里就结束了,但是如图,没有满足上述需求的第三点,另一个label被拉大了,居中显示变得很难看!!!!


仔细研究了一下,发现label本身的Hugging (这个属性可以理解为frame由内容决定,阻止被外部因素拉大)的Priority就是UILayoutPriorityDefaultLow,那么跟上述低优先级一致,然后系统判断就被拉大了

方案

只要将label本身的Hugging Priority 设置的高一些或者 代码直接改成如下就ok了

BOOL label1LonerThanLabel2 = label1.text.length> label2.text.length;
lcToLabel1.priority = label1LonerThanLabel2?UILayoutPriorityDefaultHigh:UILayoutPriorityFittingSizeLevel;
lcToLabel2.priority = label1LonerThanLabel2?UILayoutPriorityFittingSizeLevel:UILayoutPriorityDefaultHigh;

完美!


不给demo的文章都是在耍流氓

相关文章

  • AutoLayout小技巧系列(二)

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

  • AutoLayout小技巧系列(一)

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

  • Autolayout小技巧

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

  • 微信小程序:小技巧系列合辑No.1

    微信小程序小技巧系列《二》show内容展示,上传文件编码问题 : http://www.wxapp-union.c...

  • iOS9自动布局神器StackView

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

  • 一个Autolayout的调试技巧

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

  • AutoLayout

    AutoLayout深入浅出一[前传] AutoLayout深入浅出二[基本使用] AutoLayout深入浅出三...

  • iOS-AutoLayout的初级教程

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

  • Masonry使用的一个小技巧

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

  • Autolayout调试奇淫巧技&&Reveal

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

网友评论

  • BossMoney:其实用stackview更加简单
  • xxttw:其实你把L1 L2放到一个容器view 里让L3距离容器底部约束为0,就不需要判断了,是不是更简单
  • Gavin_peng:学到了 赞
  • keelZJP:好牛逼的说,这东西纠结我都蛋疼了,不错错不错

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

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