在開發(fā)項目的時候,經(jīng)常遇到需要適配uilabel的寬度的地方航夺。如果label后面不需要緊跟其他的UI元素還可以蕉朵,只需要設置一個label的寬度,然后字體靠左對齊就可以了阳掐。
但是始衅,如果像圖中這樣依然采用這種方式冷蚂,則會導致右邊的元素不會緊跟著文字,達不到預想的效果觅闽。
這時preferredMaxLayoutWidth就可以發(fā)揮它的作用了帝雇。
// Support for constraint-based layout (auto layout)
// If nonzero, this is used when determining -intrinsicContentSize for multiline labels
@property(nonatomic) CGFloat preferredMaxLayoutWidth NS_AVAILABLE_IOS(6_0);
文檔中說的大概意思就是,當約束基于auto layout時蛉拙,如果這個值不是0尸闸,這個屬性就可以用來固定多行l(wèi)abel的寬度。
也就是說當文本很長的時候孕锄,可以通過這個屬性來設置label的最大寬度吮廉,使label通過更多的行數(shù)來展示全部文本內(nèi)容。
那么問題來了畸肆,我們要的效果是限制但行文本的最大寬度宦芦,而不是讓文本多行展示。
這個地方我試過將label的numberOfLines設置為1轴脐,但是此時設置的最大寬度不起作用了调卑。(畢竟preferredMaxLayoutWidth說明是約束多行文本的最大寬度。大咱。)
所以恬涧,我又想到了一個曲線救國的辦法,在xib中為label的高度加一個只有一行文字時高度的約束碴巾,這時經(jīng)過我的測試就達到了預期的效果:只展示單行文字溯捆,并且label不會超過設定的最大寬度,文字長度較短時厦瓢,label也是對應文本的相應寬度提揍。完美!
(文章寫的很少煮仇,有些啰嗦劳跃,見諒。)