UILabel的autolayout~

首先新建一个项目,拖一个label进来,而后让numberofLines = 0spa

而后再控制器里面写上code

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        _label.text = @"aaaaaaaaaaaasfeaqrgrthrwthwrtyjhwryjwryjwryjwryjwryjwryjwryjwrytjwryjwrytjwrytjwrtjwrtyjwrtjwrtjqwrtjwrtjhwrtjhetjrthjqwrthjqrthqrthjqrtjhqrtjhqarthjqethjteqathqtehqthqathqrthqrtjhq";
    });

运行,效果以下blog

 

没有添加约束的状况下,给UILabel设置过长的内容不会改变他的frameget

 

2.添加顶部约束和左部约束两个约束qt

再次运行class

会发现下面的结果autolayout

 

label被拉长了,并且咱们打印出其frame能够看出,其拉伸的很是长,1385.5;其实已经能够猜到,这差很少是设置的文字的总长度程序

,或者你能够用系统的API计算一下.queue

 

 

3.如今添加上左右三个方向的约束,以下图自适应

再次运行程序,你会发现label没有变宽,可是本身变高了

以下图

同理,若是你添加了上下左约束,label就会高度不变,长度变长,总之label会向没有约束的地方延伸,具体向,并且优先横向延伸,而且横向延伸的状况下,label的文字始终是一行,及时label高度足够,也不会变成多行

 

 

 

4.再回到第二种状况,若是label只添加了上左约束,此时设置超过label长度的文字label是会在横向上无线延伸的,可是有一个属性

preferredMaxLayoutWidth能够来设置,label计算高度时所用的最大宽度(autolayout下而且label的numberOfLines = 0的状况下才生效)

也能够在IB里面设置,以下

在里面填写一个数值.而后将后面的勾选框勾上,此时在运行程序

label虽然没有设置右侧约束(或者宽度约束),但label得宽度不是横向无限延伸了,而是按照刚才填写的值进行横向延伸,而且也会自动变为多行,且自适应内容了

 

 

此时preferredMaxLayoutWidth限制的数值为200,咱们如今给label加上右侧限制,距离父控件10个单位长度

此时运行结果以下

此时咱们能够看到这种状况下,label的宽度是根据autolayout设置的约束来决定的,而高度则是根据设置的preferredMaxLayoutWidth = 200,来计算的,因此label上下出现了margin

相关文章
相关标签/搜索