美文网首页
关于Autolayout 你容易忽略的地方

关于Autolayout 你容易忽略的地方

作者: Rui哥 | 来源:发表于2018-09-19 21:40 被阅读36次

原文参考

一、为什么UILabel UIImageView UIButton 可以不指定尺寸约束

说到模糊约束,content Hugging/content Compression Resistance就是2个UIView自带的模糊约束。 而这两个约束存在的条件则是UIView必须指定了 Intrinsic Content Size。 在了解这两个模糊约束之前,必须了解Intrinsic Content Size是什么东西。

Intrinsic Content Size:固有大小(Intrinsic 是内在的意思)。顾名思义,在AutoLayout中,它作为UIView的属性(不是语法上的属性),意思就是说我知道自己的大小,如果你没有为我指定大小,我就按照这个大小来。 比如:大家都知道在使用AutoLayout的时候,UILabel是不用指定尺寸大小的,只需指定位置即可,就是因为,只要确定了文字内容,字体等信息,它自己就能计算出大小来。

屏幕快照 2018-05-30 上午11.21.41.png

UILabel,UIImageView,UIButton等这些组件及某些包含它们的系统组件都有 Intrinsic Content Size 属性。 也就是说,遇到这些组件,你只需要为其指定位置即可。大小就使用Intrinsic Content Size就行了。
在代码中,上述系统控件都重写了UIView 中的 -(CGSize)intrinsicContentSize: 方法。 并且在需要改变这个值的时候调用:invalidateIntrinsicContentSize 方法,通知系统这个值改变了。
所以当我们在编写继承自UIView的自定义组件时,也想要有Intrinsic Content Size的时候,就可以通过这种方法来轻松实现。


二UILabel 抗压缩、抗拉伸约束简述

首先主要介绍:Priority(控件约束的优先级)、Content Hugging Priority(控件抗拉伸优先级)、Content Compression Resistance Priority(控件抗压缩优先级),好的,开始一个个介绍。
  • 1.Priority控件中每一个约束都有优先级,在xib和storyboard中很容易看到,如图:


    Snip20180919_7.png
  • 2.Content Hugging Priority(控件抗拉伸优先级) 优先级越高越不容易被拉伸,默认是250。


    Snip20180919_9.png
  • 3.Content Compression Resistance Priority(控件抗压缩优先级) 和拉伸一样,优先级越高的越不容易和压缩,默认是750。
Snip20180919_10.png
  • 案例:


    Snip20180919_11.png

相关文章

网友评论

      本文标题:关于Autolayout 你容易忽略的地方

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