2014-01-22 244 views
16

我的UILabel與 行數= 2 系統字體大小= 15 最小字體大小= 8 線中斷模式的 - 截斷尾部NSAttributedString忽略自動收縮和numberOfLines爲的UILabel(iOS 6的)

當我設置對於UILabel而言,類型爲NSString的長文本可以正常工作,並顯示多行文本(如果需要,可縮放)。 當我試圖設置類型爲NSAttributedString的文本時,它會忽略最小字體大小和Autoshrink,因此我看到一行文本的最大字體大小。

是否有可能解決這一問題

看起來像這樣(標籤大小爲常數)

----------------------- 
| normal NSString Text| 
| very very long ... | 
----------------------- 

--------------------------- 
|NSAttributedString tex...| 
--------------------------- 
+0

您是使用Interface Builder,以編程方式執行還是使用兩者? – xicocaio

+0

我正在嘗試以編程方式執行此操作(創建一個字符串)。標籤在界面構建器中創建 –

+0

當您在界面構建器中創建標籤時,是否設置了行數和自動收縮?或者以編程方式設置? – xicocaio

回答

7

minimumFontSize被棄用iOS6的的。此外,adjustsFontSizeToFitWidth僅在numberOfLines設置爲1時才起作用。UILabel不會在多行中調整文本大小,因爲在縮小字體時處理換行符時存在歧義。使用minimumScaleFactor設置文本縮放的最小尺寸。

下面的代碼將填充UILabel字體大小20的屬性串,並且一半比例縮小到10。

self.label.lineBreakMode = NSLineBreakByTruncatingTail; 
NSMutableAttributedString *hogan = [[NSMutableAttributedString alloc] initWithString:@"Presenting the great... Hulk Hogan! Presenting the great... Hulk Hogan! Presenting the great... Hulk Hogan! Presenting the great... Hulk Hogan! Presenting the great... Hulk Hogan! Presenting the great... Hulk Hogan! Presenting the great... Hulk Hogan!"]; 
[hogan addAttribute:NSFontAttributeName 
       value:[UIFont systemFontOfSize:20.0] 
       range:NSMakeRange(0, [hogan length])]; 
[self.label setAttributedText:hogan]; 
self.label.adjustsFontSizeToFitWidth = YES; 
self.label.numberOfLines = 1; 
self.label.minimumScaleFactor = 0.5; 
+2

對於多行應該numberOfLines = 0? –

+8

adjustsFontSizeToFitWidth也適用於多行。但是,它不適用於多行中的歸因字符串。 –

57

最小尺寸我發現了一個辦法做到這一點:

label.adjustsFontSizeToFitWidth = true 
label.attributedText = attributedString 
label.lineBreakMode = .ByTruncatingTail // this did the trick! 

只有在設置屬性字符串後設置了第三行時,它才起作用。似乎屬性字符串在設置時會覆蓋換行符(除其他外)。

+0

真棒!謝謝 – Jim75

+0

這太奇怪了!你知道它爲什麼工作@ julian –

+0

如果我追加其他nsattributed字符串與對齊權 – TomSawyer

0
NSMutableAttributedString *muAtrStr = [[NSMutableAttributedString alloc]initWithString:@"2"]; 
NSAttributedString *atrStr = [[NSAttributedString alloc]initWithString:@"\ndays" attributes:@{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Bold" size:8]}]; 
[muAtrStr appendAttributedString:atrStr]; 
self.lbl.numberOfLines = 0; 
[self.lbl setAttributedText:muAtrStr]; 
相關問題