定义
什么叫做Autolayout?
其实就像开头的标题是一样的自动+布局 那么这是说帮你做的的呢?其实是电脑再帮你做这样的工作,要不也不能叫自动布局!
正题
今天看了叶孤城大神的文章,有所心得,结合自己的心得得出以下结论。为什么在自动布局(Autolayoyt)里面设置一个label
的大小只需要设置两个值就可以,哪两个值呢?就是位置,这里可以不设置大小就可以显示这个label,但是为什么view不行呢,那么重点来了,原因就是view里面没有内容,你会发现关于UIButton 以及 UILabel 这一类的东西都是可以只设置两个属性的,那么问题来了,怎样设置留白的问题呢?代码如下:
- (CGSize)intrinsicContentSize
{
CGSize originalSize = [super
intrinsicContentSize];
CGSize size = CGSizeMake(originalSize.width+20, originalSize.height+20);
return
size;
}
注释:上述代码的意思就是,我们先获取系统通过Label的内容计算出来的宽和高,再分别给他增大再返回新的Size就可以了。再运行一下,你就会发现,Label的大小就会比内容大了。(别忘了,把对齐方式设置为居中)
再回到之前的那个问题,UIView如果只设置坐标,不设置大小会报错的问题。
如果是用代码写约束,如果你只想设置坐标不想设置大小,那么你需要像上面的代码一样,在- (CGSize)intrinsicContentSize为你的UIView指定一个默认大小。
如果是在XIB里,那么你需要在下图这个Instrinsic Size的属性里设置为Placeholder。这样,Xcode就不会报错了。如图所示的两种情况:
![](https://img.haomeiwen.com/i1540977/246f21f52000c072.png)
![](https://img.haomeiwen.com/i1540977/86c16c92fef6f21a.png)
>当属性得到更改之后,你会发现你的UIView不会爆红了,
下面实现的是label在上面UIView中实现自适应高度的问题
同样的在上面的xib当中拖入一个label,那么label的frame是这样设置的(label距离上下左右分别是0)这样就能够保证label的大小改变会使外层view的大小也随之变化,最后你需要设置label的lineofnumber属性为0,这个时候你会有如图所示的展示--
![](https://img.haomeiwen.com/i1540977/fa4dca5799e8e89a.png)
以上学习感谢叶孤城大神,fighting!!!我是辛小二,90后奔跑男孩!
本人个人微信公众号地址(喜欢记得关注😯)
![](https://img.haomeiwen.com/i1540977/23d9da03508872eb.jpg)
网友评论