2017-10-16 63 views
1

我試圖對齊兩個UILabel使用自動佈局,其中第一個標籤沒有設置寬度但使用內在內容大小,第二個應該是與第一個相同的寬度,包裝文字換行。多行UILabel與內容大小相同的寬度UILabel

理想情況下,第二個標籤應該將數字行設置爲0以與動態類型配合使用,但我暫時將其設置爲2,即使給定了特定高度。然而,當我嘗試對齊equal widthstrailing時,內在內容大小標籤展開爲多行標籤的寬度,就好像它全部位於同一行上一樣(請參見下圖)。

什麼我後: The effect I'm after

我所看到的: The effect I'm getting

有什麼辦法讓我達到我想要的,而不指定寬度第一個標籤?我希望它的內容能夠擴展爲動態類型,第二個標籤具有相同的寬度,並將所有文本換行爲新行。

+0

你能否提供更多信息關於第一個標籤,如最多可能包含多少個單詞?其內容是否可以超過1行?它會總是有一些文字,也可能是空的? – Adeel

+0

這可能看起來像一個愚蠢的問題,但你設置第一個標籤等於第二個的寬度,反之亦然? – Jonathan

+0

@Adeel第一個標籤只包含三個單詞,但我希望它是動態的原因是我想添加動態類型並將其本地化爲可能會改變它的多種語言。它永遠不會超過1行,並且不能爲空。 – Aleksander

回答

1

你可以不用任何掛鉤的代碼。此解決方案的關鍵點在於內容擁有優先級,該標籤的大小將完全根據內在內容大小進行計算。

本質內容大小標籤

  • 設置水平內容擁抱優先必需的(1000)

多行標籤(Lorem存有標籤)

  • 對齊領先到固有內容大小標籤
  • 對齊尾隨固有內容尺寸標籤


Xcode中配置了兩個標籤(左:本質,右:多標記)

configuration of intrinsic content size label configuration of multiline label

+0

謝謝!我知道內容擁抱/壓縮數字可能與它有關,但他們一直困惑着我,我無法嘗試自我解決問題。這是一種魅力! – Aleksander

0

layoutSubviews,設置第二個標籤的preferredMaxLayoutWidth到第一個標籤固有寬度,這樣的事情:

secondLabel.preferredmaxlayoutwidth = firstLabel.intrinsicContentSize.width 
+0

有什麼方法可以在故事板中實現此目的/我應該如何在故事板中進行操作,以便它不會抱怨不可滿足的約束條件? – Aleksander

+0

爲什麼你的故事板抱怨不可滿足的限制?請張貼錯誤的截圖。 –

+0

抱歉,缺少更好的單詞。我只是不知道該怎麼設置。如果我不給它第二個標籤的任何寬度約束,它會溢出屏幕(如上面的插圖#2)。我更喜歡故事板能夠準確地表示它實際呈現的內容。我可以在故事板中設置任何約束來實現此目的,並幫助保持佈局代碼遠離我的VC? – Aleksander