2014-04-14 61 views
2

我試圖設置約束來獲取靜態表格視圖單元格中的多行標籤,但顯然這對我不起作用,標籤仍然在單行中。我已將numberOfLines屬性設置爲0,並將高度約束設置爲大於或等於。我正在爲tableView:heightForRowAtIndexPath正確設置單元格的高度。請查看我的屏幕截圖以查看IB中的設置。帶自動佈局的多行UILabel不起作用

enter image description here

+0

什麼不適合它? –

+0

@ScottBerrevoets Sry,我更新了我的問題。標籤仍然在一行中 – gpichler

+0

地址是否足夠長以適合兩行?你設置了'preferredMaxLayoutWidth'嗎? –

回答

3

在你上面的評論中提到您目前沒有設定preferredMaxLayoutWidth。這個屬性告訴你的標籤,它應該在該屬性值的寬度上佈置它的文本。在UILabel.h:

如果不爲零,確定爲-intrinsicContentSize多標籤

換句話說,當這個被使用,如果不設置,標籤的內在內容的大小是什麼寬度標籤需要繪製文本。如果將此屬性設置爲標籤的邊界,它將開始在下一行繪製(否則,如果numberOfLines爲0,則會關閉文本)。

就你而言,我可能會在tableView:willDisplayCell:forRowAtIndexPath:那樣做。

+0

numberOfLines = 0是無限數量的行,所以除非他有不同的自動換行屬性,否則不應該關閉文本。 – FrostRocket

+0

我(我想)我的意思是說:如果您沒有將'intrinsicContentSize'設置爲標籤的邊界,並且'numberOfLines'爲0,則會關閉文本。爲了清晰起見,我更新了答案。 –

1

您可以在代碼中設置preferredMaxLayoutWidth,但在故事板中設計用戶界面時,仍然會看到一條長邊的單行標籤,該標籤在邊緣處被切斷。另一種方法是使用Option-Return在故事板內手動插入文本中任何位置的換行符。然後,您只需將行數設置爲大於文字的大小即可。然後選擇你的標籤,點擊Cmd-=。這將計算您的標籤的內在內容大小,並將換行符恰好放在您想要的位置。

從理論上講,我認爲設置preferredMaxLayoutWidth是更正確的方法,尤其是使用Autolayout。不過,我發現使用上述方法更實用,因爲它可以讓您在設計時看到故事板中的佈局,並且可以完全控制換行符。對於文本不經常變化的標籤,這通常會更好。如果您正在動態更改標籤文本,則設置preferredMaxLayoutWidth是首選方式。