自动布局(Autolayout)

定义

什么叫做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就不会报错了。如图所示的两种情况:

自动布局(Autolayout)_第1张图片
截图.png
自动布局(Autolayout)_第2张图片
截图2.png

>当属性得到更改之后,你会发现你的UIView不会爆红了,

下面实现的是label在上面UIView中实现自适应高度的问题

同样的在上面的xib当中拖入一个label,那么label的frame是这样设置的(label距离上下左右分别是0)这样就能够保证label的大小改变会使外层view的大小也随之变化,最后你需要设置label的lineofnumber属性为0,这个时候你会有如图所示的展示--


自动布局(Autolayout)_第3张图片
截图3.png

以上学习感谢叶孤城大神,fighting!!!我是辛小二,90后奔跑男孩!

本人个人微信公众号地址(喜欢记得关注)


自动布局(Autolayout)_第4张图片
辛小二个人微信公众号地址

你可能感兴趣的:(自动布局(Autolayout))