首先新建一個項目,拖一個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