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

相關文章
相關標籤/搜索