2017-05-17 25 views
1

我有一個多行UILabel,另一個標籤應該在第一行結束後立即開始。如何左下角將視圖與多行UILabel的文本對齊

這裏是什麼樣子的一行文字: enter image description here

正如你所看到的,用「39秒」對準消息標籤的左邊和基線的第二個標籤。

這裏的一個多線標籤具有截短的尾: enter image description here

這也是很好,但是當消息標籤需要兩條線,但第二行比第一短出現問題。這是我遇到麻煩的照片: enter image description here

所以我需要弄清楚如何將第二個標籤(帶有時間的標籤)對齊到第一個文本結束的位置。有沒有已知的方法可以做到這一點,還是有不同的解決方案,我不知道?

+0

你在兩個標籤之間設置了什麼限制? – Paulw11

+0

@ Paulw11時間標籤與消息標籤的基線對齊並且4px前導 – LulzCow

回答

0

而不是使用兩個不同的標籤,我會使用字符串連接,並使用相同的標籤,並結合兩個不同的字符串。例如,

let sampleText = "Hey this is a test..." + " " + "1 sec" 

如果您擔心每行文本的不同字體,可以使用屬性文本自定義。

+0

查看我的問題中的第二張圖片,您將如何知道何時切斷第一個標籤?你不能截斷標籤的尾部,因爲那會摧毀「1秒」部分。所以如果第一個字符串很長,我該怎麼做才能知道何時用「...」替換文本? – LulzCow

+0

您可以設置字符限制。在x個字符後,第一個字符串會被截斷,然後您可以在該字符串的末尾追加「1秒」。 我覺得你的問題與這個相似嗎? http://stackoverflow.com/questions/37409260/uilabel-text-truncation-vs-line-breaks-in-text –

+0

是的,我認爲這基本上是一樣的問題。字符數限制會使它有點不一致,但它可能是最接近我想要的最簡單的方法 – LulzCow

0

我覺得在這種情況下你不需要2個標籤。

如果您希望部分標籤文本具有不同的字體,則應使用NSAttributedString並設置label.attributedText屬性。

但是,您將不得不處理截斷的尾部情況。

也許設置lineBreakMode.byTruncatingMiddle會適合你嗎?

如果不是,則必須計算給定字體的字符串大小,將寬度約束設置爲less或equal,並手動截斷文本。

可能有用的資源:

How to calculate the width of a text string of a specific font and font-size?

Figure out size of UILabel based on String in Swift

+0

我在.byTruncatingMiddle上使用了一個標籤,但是我的設計人員不喜歡它,所以我一直試圖它有兩個標籤。我不知道如何確定第二行手動截斷它的最大寬度。 – LulzCow

+0

看起來你需要類似的東西:http://stackoverflow.com/questions/24783183/truncate-uilabel-in-specific-location – kostek

0

你的UI,似乎正好是做什麼它應該。對於多行標籤,寬度取決於最長行的長度。考慮以下幾點:

enter image description here

注意如何在第一線,「這是」決定了標籤,以便任何你對準這不一定會對齊到最後一行的寬度。解決這個

一種辦法是設置第二標籤的內容與程序一致的間距的第一一部分。因此,在您的視圖控制器中,執行如下操作:

self.firstLabel.text = [NSString stringWithFormat:@"%@ %@",firstContent,secondContent]; 

只需確定代碼中的間距即可。我知道這是Objective-C,但你得到了漂移。如果要爲兩個文本保留不同的屬性,也可以使用屬性文本屬性。

+0

我很困惑我將如何處理截斷第一個字符串,仍然允許第二個總是出現。我不能截斷標籤的尾部,我可以在技術上截斷中間,但看起來很糟糕。你知道如果我可以確定用「...」替換第一個字符串的末尾,如果它的寬度太大了嗎? – LulzCow