AutoLayout小技巧系列(二)
2016-01-19 17:06
411 查看
转载 http://www.jianshu.com/p/248c5ed719ec
AutoLayout小技巧系列(二)
要求
label1和label2等宽多行
label3的位置 由label1和label2的内容决定(谁行高就贴着他的底部)
label1和label2不能被拉大,位置居上显示
那么高潮来了,他给出了他的做法:通过俗套的计算label高度的方式,强行给label3设置约束
我呵呵一笑,既然autoLayout这么方便,那么为啥还要回到frame时代那种又丑又不好用的方式
我的思路
在label3顶部分别给label1 和label2底部拉一根约束,通过判断label1和label2内容高度决定这两个约束的优先级,来决定在哪个label的下方,可能说起来比较抽象,那么上图
建立这两个约束,分别是label3和label1垂直方向,label3和label2垂直方向的约束(姑且设为0)
2.把这两个约束优先级都设为750(低于1000就行),为啥要低于1000,可以看我之前的AutoLayout小技巧系列(一)
3.判断这label1和label2的内容大小,我这里采取简单粗暴的直接比较字符串长度,然后决定上面两个约束的优先级
按理来说,到这里就结束了,但是如图,没有满足上述需求的第三点,另一个label被拉大了,居中显示变得很难看!!!!
仔细研究了一下,发现label本身的Hugging (这个属性可以理解为frame由内容决定,阻止被外部因素拉大)的Priority就是UILayoutPriorityDefaultLow,那么跟上述低优先级一致,然后系统判断就被拉大了
方案
只要将label本身的Hugging Priority 设置的高一些或者 代码直接改成如下就ok了
完美!
AutoLayout小技巧系列(二)
要求
label1和label2等宽多行
label3的位置 由label1和label2的内容决定(谁行高就贴着他的底部)
label1和label2不能被拉大,位置居上显示
那么高潮来了,他给出了他的做法:通过俗套的计算label高度的方式,强行给label3设置约束
我呵呵一笑,既然autoLayout这么方便,那么为啥还要回到frame时代那种又丑又不好用的方式
我的思路
在label3顶部分别给label1 和label2底部拉一根约束,通过判断label1和label2内容高度决定这两个约束的优先级,来决定在哪个label的下方,可能说起来比较抽象,那么上图
建立这两个约束,分别是label3和label1垂直方向,label3和label2垂直方向的约束(姑且设为0)
2.把这两个约束优先级都设为750(低于1000就行),为啥要低于1000,可以看我之前的AutoLayout小技巧系列(一)
3.判断这label1和label2的内容大小,我这里采取简单粗暴的直接比较字符串长度,然后决定上面两个约束的优先级
[code]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了
[code]BOOL label1LonerThanLabel2 = label1.text.length> label2.text.length; lcToLabel1.priority = label1LonerThanLabel2?UILayoutPriorityDefaultHigh:UILayoutPriorityFittingSizeLevel; lcToLabel2.priority = label1LonerThanLabel2?UILayoutPriorityFittingSizeLevel:UILayoutPriorityDefaultHigh;
完美!
相关文章推荐
- Objective-C的hook方案(一): Method Swizzling
- Java内存模型FAQ(九)在新的Java内存模型中,final字段是如何工作的
- windows线程yield以及Sleep(0)和SwitchToThread之间的区别
- Java 浅析I/O模型
- 转: 私人珍藏的Chrome插件,吐血推荐
- 数据库——常用函数
- 007-LAMP_MySQL_DDL
- 浅谈 Java 多线程环境下 如何跟踪死锁 (例子)
- 原生js写ajax
- xcode中查找、修改变量名,类名及字符串的替换操作
- 分享一个获取手机IP地址的工具类,
- Java并发编程:线程池
- Redis 键(key)
- centos下c代码 更改配置文件中配置项的数值
- MySql初步
- iOS UITableView 左滑删除cell
- 希尔排序
- UNDERSTANDING CONVOLUTIONAL NEURAL NETWORKS FOR NLP
- hashCode方法与哈希存储
- Win8.1系统在SSD盘安装双系统提示错误代码0xc0000225的故障原因及解决方法