如何修改多行UILabel
中的行間距(行間距)?設置UILabel行間距
回答
編輯:很明顯,NSAttributedString
會在iOS 6及更高版本中完成此操作。不使用NSString
來設置標籤的文本,而是創建一個NSAttributedString
,在其上設置屬性,然後將其設置爲標籤上的.attributedText
。你想要的代碼將是這樣的:
NSMutableAttributedString* attrString = [[NSMutableAttributedString alloc] initWithString:@"Sample text"];
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
[style setLineSpacing:24];
[attrString addAttribute:NSParagraphStyleAttributeName
value:style
range:NSMakeRange(0, strLength)];
uiLabel.attributedText = attrString;
NSAttributedString的老attributedStringWithString做同樣的事情,但現在是已被棄用。
由於歷史的原因,這是我原來的答覆:
簡短的回答:你不能。要改變文本行之間的間距,您必須繼承UILabel
的子類並滾動自己的drawTextInRect
,創建多個標籤或使用不同的字體(可能是爲特定行高編輯的一個,請參閱Phillipe的答案)。在印刷和網絡世界中,文本行之間的空間被稱爲「領先」(用'標題'押韻,並且來自幾十年前使用的鉛金屬)。領先是UIFont
的只讀屬性,它在4.0中被棄用,並被lineHeight
取代。據我所知,沒有辦法創建一個具有一組特定參數的字體,如lineHeight
;您可以獲得系統字體和您添加的任何自定義字體,但安裝後無法調整它們。
UILabel
也沒有間距參數。
我並不特別滿意UILabel
的行爲,所以我建議編寫自己的子類或使用第三方庫。這將使行爲獨立於您的字體選擇併成爲最可重用的解決方案。
我希望那裏是在UILabel
更靈活,我很樂意被證明是錯誤的!
MSLabel是一個更好的 – trillions 2013-03-10 23:30:53
這傢伙創造了一個類來獲得的line-height(不使用CoreText,作爲MTLabel庫):https://github.com/LemonCake/MSLabel
我的解決辦法來修補字體文件本身,肯定解決了線的高度。 http://mbauman.net/geek/2009/03/15/minor-truetype-font-editing-on-a-mac/
我不得不修改'hhea'塊中的'lineGap','ascender','descender'(如在博客示例中)。
超酷!這些OS X字體工具也適用於我的OTF字體(儘管它僅指定TTF ...)。我的字體有行高1000(!),我把它改爲0,並且瞧。我在每行文本下面有幾英里和幾英里的空白空間。 – Jonny 2012-08-29 07:01:14
我不敢相信這是最好的解決方案(沒有冒犯!),但它是迄今爲止最簡單的。我使用免費的(Windows)軟件[Type Light](http://www.cr8software.net/typelight.html)(在Font | Metrics | Advanced下可以修改lineGap)來編輯我的字體。它也允許你「重新命名」字體,我無法弄清楚如何使用Philippe提到的工具。 – 2012-11-29 02:16:34
這太棒了@Philippe!感謝帖子! – Robbie 2013-01-14 21:39:56
在IOS開始6可以設置在的UILabel的屬性串:
我發現NSString *labelText = @"some text";
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:labelText];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
[paragraphStyle setLineSpacing:40];
[attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [labelText length])];
cell.label.attributedText = attributedString ;
謝謝!我會補充說,使用'AttributedString'禁用例如標籤的文本對齊,所以你必須將其添加到段落樣式。 – cyborg86pl 2013-10-30 13:55:32
謝謝你,你救了我的命! – 2014-03-01 15:34:05
最好的事情是:https://github.com/mattt/TTTAttributedLabel
它是一個UILabel子類,所以你能把它,然後改線高度:
myLabel.lineHeightMultiple = 0.85;
myLabel.leading = 2;
myLabel.leading = 2;不工作 – 2017-09-04 04:45:21
但是,在Xcode 6.1.1中,選擇標籤並更改屬性面板中的行值將導致面板閃爍並鎖定應用程序。我只能通過強制退出Xcode退出面板。 – izk 2014-12-22 19:35:27
動畫豎起大拇指 – Tieme 2014-12-23 16:20:48
在版本7.1中,面板輕彈,它對運行時間沒有任何影響。必須在代碼中完成。 – ByteArtisan 2015-11-15 15:31:16
當然,如果你把這個字符串編程小李的答案是行不通的。在這種情況下,您需要傳遞屬性字符串並更改其樣式。
NSMutableAttributedString * attrString = [[NSMutableAttributedString alloc] initWithString:@"Your \nregular \nstring"];
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
[style setLineSpacing:4];
[attrString addAttribute:NSParagraphStyleAttributeName
value:style
range:NSMakeRange(0, attrString.length)];
_label.attributedText = attrString;
下面是一些快速的代碼爲你設定的行編程
let label = UILabel()
let attributedText = NSMutableAttributedString(string: "Your string")
let paragraphStyle = NSMutableParagraphStyle()
//SET THIS:
paragraphStyle.lineSpacing = 4
//OR SET THIS:
paragraphStyle.lineHeightMultiple = 4
//Or set both :)
let range = NSMakeRange(0, attributedText.length)
attributedText.addAttributes([NSParagraphStyleAttributeName : paragraphStyle], range: range)
label.attributedText = attributedText
間距從界面生成器:
編程:
SWIFT 4
使用標籤擴展
extension UILabel {
func setLineSpacing(lineSpacing: CGFloat = 0.0, lineHeightMultiple: CGFloat = 0.0) {
guard let labelText = self.text else { return }
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = lineSpacing
paragraphStyle.lineHeightMultiple = lineHeightMultiple
let attributedString:NSMutableAttributedString
if let labelattributedText = self.attributedText {
attributedString = NSMutableAttributedString(attributedString: labelattributedText)
} else {
attributedString = NSMutableAttributedString(string: labelText)
}
// Line spacing attribute
attributedString.addAttribute(NSAttributedStringKey.paragraphStyle, value:paragraphStyle, range:NSMakeRange(0, attributedString.length))
self.attributedText = attributedString
}
}
現在調用擴展功能
let label = UILabel()
let stringValue = "How to\ncontrol\nthe\nline spacing\nin UILabel"
// Pass value for any one argument - lineSpacing or lineHeightMultiple
label.setLineSpacing(lineSpacing: 2.0) . // try values 1.0 to 5.0
// or try lineHeightMultiple
//label.setLineSpacing(lineHeightMultiple = 2.0) // try values 0.5 to 2.0
或者使用標籤實例(只需複製&執行該代碼,看看結果)
let label = UILabel()
let stringValue = "Set\nUILabel\nline\nspacing"
let attrString = NSMutableAttributedString(string: stringValue)
var style = NSMutableParagraphStyle()
style.lineSpacing = 24 // change line spacing between paragraph like 36 or 48
style.minimumLineHeight = 20 // change line spacing between each line like 30 or 40
// Line spacing attribute
attrString.addAttribute(NSAttributedStringKey.paragraphStyle, value: style, range: NSRange(location: 0, length: stringValue.characters.count))
// Character spacing attribute
attrString.addAttribute(NSAttributedStringKey.kern, value: 2, range: NSMakeRange(0, attrString.length))
label.attributedText = attrString
夫特3
let label = UILabel()
let stringValue = "Set\nUILabel\nline\nspacing"
let attrString = NSMutableAttributedString(string: stringValue)
var style = NSMutableParagraphStyle()
style.lineSpacing = 24 // change line spacing between paragraph like 36 or 48
style.minimumLineHeight = 20 // change line spacing between each line like 30 or 40
attrString.addAttribute(NSParagraphStyleAttributeName, value: style, range: NSRange(location: 0, length: stringValue.characters.count))
label.attributedText = attrString
- 1. UILabel行間距
- 2. Imagemagick設置行間距?
- 3. 是否可以設置字母之間的UILabel距離?
- 4. Emacs設置行間距(行尾)註釋
- 5. UILabel中的字間距
- 6. 在錶行之間設置邊距
- 7. 用VBA設置頁腳的行間距
- 8. CATextlayer設置行距?
- 9. 如何爲`UILabel`設置字符間的間距(kern)和刪除線樣式?
- 10. Typo3記錄間距/邊距設置
- 11. AndroidPlot設置網格間距
- 12. 設置的UILabel
- 13. 使用單行文本的UILabel的行間距
- 14. CTParagraphStyleSetting + CoreText:設置行距
- 15. 如何設置行距Graphics.DrawString
- 16. UILabel如何擰緊字母間距
- 17. iOS設置UILabel值
- 18. UICollectionViewCell間距設置爲0,但仍然有間距
- 19. 在RubyMotion中對UILabel進行子類化以設置屬性文字字距
- 20. 在uilabel中設置最大行數
- 21. 如何更改UILabel行中的垂直邊距/間隙
- 22. 如何增加plist文件中UILabel的行間距
- 23. 如何通過行間距獲得UILabel的完全高度?
- 24. 如何在不影響行間距的情況下截斷UILabel?
- 25. 如何設置ListView項的間距
- 26. 如何設置動態UICollectionViewCell間距
- 27. 設置gridspec中ticks之間的距離
- 28. 在列之間設置邊距
- 29. 設置間距爲OL列表項
- 30. 如何在tableLayoutPanel中設置列間距
我與子類的UILabel做到了,基本上想法是標籤文本劃分成標記,然後每個令牌的身份長度,對於每個令牌創建一個單獨的標籤和追加相繼。而已。 – Matrix 2010-10-13 11:41:50
謊言! ;)你可以修補一個字體文件來改變行高 - 在這個頁面上看到我的答案。 – Philippe 2012-09-03 20:14:57
我[讓我相信](http://stackoverflow.com/a/8162907/1167833)有一種方法可以用NSAttributedString來做到這一點。如果您需要iOS 6以前的屬性字符串標籤,請查看[OHAttributedLabel](https://github.com/AliSoftware/OHAttributedLabel)。 – 2013-01-26 01:12:50