Jawaban:
Sunting: Tampaknya NSAttributedString
akan melakukannya, di iOS 6 dan lebih baru. Daripada menggunakan NSString
untuk menyetel teks label, buat NSAttributedString
, setel atribut di atasnya, lalu setel sebagai .attributedText
di label. Kode yang Anda inginkan akan menjadi seperti ini:
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;
AttributedStringWithString tua NSAttributedString ini melakukan hal yang sama, tapi sekarang yang sedang ditinggalkan.
Untuk alasan historis, inilah jawaban asli saya:
Jawaban singkatnya: Anda tidak bisa. Untuk mengubah jarak antar baris teks, Anda harus membuat subkelas UILabel
dan menggulung sendiri drawTextInRect
, membuat beberapa label, atau menggunakan font yang berbeda (mungkin yang diedit untuk tinggi baris tertentu, lihat jawaban Phillipe).
Jawaban panjang: Dalam dunia cetak dan online, spasi antar baris teks dikenal sebagai "leading" (berima dengan 'heading', dan berasal dari logam utama yang digunakan puluhan tahun lalu). Memimpin adalah properti hanya-baca UIFont
, yang tidak digunakan lagi di 4.0 dan diganti oleh lineHeight
. Sejauh yang saya tahu, tidak ada cara untuk membuat font dengan sekumpulan parameter tertentu seperti lineHeight
; Anda mendapatkan font sistem dan font khusus apa pun yang Anda tambahkan, tetapi tidak dapat men-tweaknya setelah diinstal.
Tidak ada parameter spasi di UILabel
juga.
Saya tidak terlalu senang dengan UILabel
perilaku apa adanya, jadi saya sarankan untuk menulis subkelas Anda sendiri atau menggunakan perpustakaan pihak ketiga. Itu akan membuat perilaku tidak bergantung pada pilihan font Anda dan menjadi solusi yang paling dapat digunakan kembali.
Saya berharap ada adalah lebih banyak fleksibilitas dalam UILabel
, dan saya akan senang untuk menjadi terbukti salah!
Mulai di ios 6 Anda dapat mengatur string yang diatribusikan di 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
menonaktifkan misalnya perataan teks label, jadi Anda harus menambahkannya ke gaya paragraf.
Anda dapat mengontrol spasi baris di storyboard:
Dari Pembuat Antarmuka:
Secara terprogram:
Cepat 4
Menggunakan ekstensi label
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
}
}
Sekarang fungsi ekstensi panggilan
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
Atau menggunakan contoh label (Cukup salin & jalankan kode ini untuk melihat hasilnya)
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
Cepat 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
Solusi saya adalah menambal file font itu sendiri dan memperbaiki tinggi barisnya dengan pasti. http://mbauman.net/geek/2009/03/15/minor-truetype-font-editing-on-a-mac/
Saya harus memodifikasi 'lineGap', 'ascender', 'descender' di blok 'hhea' (seperti dalam contoh blog).
Orang ini membuat kelas untuk mendapatkan tinggi baris (tanpa menggunakan CoreText, sebagai pustaka MTLabel): https://github.com/LemonCake/MSLabel
Hal terbaik yang saya temukan adalah: https://github.com/mattt/TTTAttributedLabel
Ini adalah subkelas UILabel jadi Anda bisa langsung memasukkannya, lalu mengubah tinggi baris:
myLabel.lineHeightMultiple = 0.85;
myLabel.leading = 2;
Saya menemukan Perpustakaan Pihak Ketiga Seperti ini:
https://github.com/Tuszy/MTLabel
Menjadi solusi termudah.
Berikut beberapa kode cepat bagi Anda untuk mengatur spasi baris secara terprogram
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
Tentu saja, jawaban Mike tidak berfungsi jika Anda meneruskan string secara terprogram. Dalam hal ini Anda perlu meneruskan string yang diatribusikan dan mengubah gayanya.
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;