Cara mengontrol spasi baris di UILabel

274

Apakah mungkin untuk mengurangi kesenjangan antara teks, ketika dimasukkan ke dalam beberapa baris dalam UILabel? Kita dapat mengatur bingkai, ukuran font dan jumlah baris. Saya ingin mengurangi kesenjangan antara dua garis di label itu.

Abhinav
sumber
2
Bolehkah saya menyarankan Anda menerima salah satu jawaban yang benar untuk iOS 6.0 dan yang lebih baru? Jawaban yang saat ini diterima sudah usang.
Mark Amery
Untuk setiap baris gunakan yang baru UILabel, lalu sematkan semua label dalam a StackView. Akhirnya, sesuaikan spacingdari StackView. Ingatlah untuk menumpuknya secara vertikal.
Sayang
Lihat tautan berikut untuk solusinya di Swift 2. stackoverflow.com/a/39158698/6602495
Sneha
Lihat stackoverflow.com/a/44325650/342794 untuk tweak storyboard dan detail lainnya.
lal

Jawaban:

262

Saya berpikir untuk menambahkan sesuatu yang baru ke jawaban ini, jadi saya tidak merasa seburuk ini ... Ini jawaban Swift :

import Cocoa

let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = 40

let attrString = NSMutableAttributedString(string: "Swift Answer")
attrString.addAttribute(.paragraphStyle, value:paragraphStyle, range:NSMakeRange(0, attrString.length))

var tableViewCell = NSTableCellView()
tableViewCell.textField.attributedStringValue = attrString

"Jawaban singkat: Anda tidak bisa. Untuk mengubah jarak antar baris teks, Anda harus mensubclabel UILabel dan menggulung drawTextInRect Anda sendiri, atau membuat beberapa label."

Lihat: Mengatur jarak garis UILabel


Ini adalah jawaban yang sangat lama, dan yang lainnya telah menambahkan cara baru dan lebih baik untuk menangani ini .. Silakan lihat jawaban terkini yang disediakan di bawah ini.

Mazyod
sumber
23
Sejak iOS 6.0, Anda dapat mengontrolnya melalui NSAttributedString(juga tersedia di properti UILable di pembuat antarmuka Xcode).
ıɾuǝʞ
13
Menariknya, sedekat yang saya tahu, Anda dapat menambahkan spasi ekstra di antara garis, tetapi tidak menguranginya NSParagraphStylesaat menggunakan NSAttributedString. (Saya mungkin perlu melakukan lebih banyak pengujian terhadap properti yang dapat dimodifikasi lainnya, tetapi lineSpacingproperti hanya memungkinkan Anda untuk meningkatkannya.)
livingtech
lihat jawaban saya untuk melihat cara menggunakan NSAttributedString
d.ennis
2
@livingtech Itu menyebalkan, dan saya yakin Anda benar. Apakah Anda menemukan solusi?
Dom Vinyard
7
Hanya untuk memperjelas sesuatu di utas ini. Jika Anda ingin mengecilkan penspasian garis, atur tinggi garis ke 1.0, dan kemudian setLineHeightMultiple ke nilai yang lebih rendah <1.0, seperti: [paragrafty setLineHeightMultiple: 0.8] atau paragraphStyle.lineHeightMultiple = 0.8
virsunen
401

Di Xcode 6 Anda bisa melakukan ini di storyboard:

masukkan deskripsi gambar di sini

Mike S
sumber
1
Manfaatkan lebih banyak storyboard!
Allen
22
@PaperThick memiliki masalah yang sama di 6.1.1. "Harlem shake" selama beberapa menit. Tidak tahu cara memperbaikinya :) Xcode Shaking
Anton Gaenko
8
Apakah ada cara untuk mengatur font khusus dengan cara ini? Sepertinya saya tidak bisa mengubah helvetica neue menjadi font lain.
Marcos Curvello
2
Jika Anda mengaktifkan 'Attributed', dan kemudian buka file sebagai kode sumber Anda dapat mengedit 'lineHeightMultiple' secara manual, dan oleh karena itu bypass bug Harlem Shake
ED-209
2
@azdev untuk siapa pun yang masih melihat ini, saya lebih lama mendapatkan getar di Xcode 7.3, tapi saya pikir ini adalah versi pertama yang belum menjadi masalah
LulzCow
103

Mulai dari iOS 6 Anda dapat mengatur string yang dikaitkan dengan UILabel. Periksa yang berikut ini:

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:label.text];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineSpacing = spacing;
[attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, label.text.length)];

label.attributedText = attributedString;
iosMentalist
sumber
1
Itu attributedStringharus menjadi NSMutableAttributedString(BUKAN NSAttributedString)
Mike S
14
Kode baris pertama adalahNSMutableAttributedString *attributedString = [NSMutableAttributedString alloc]initWithString:@"sample text"];
Allen
The lineSpacingmilik NSMutableParagraphStyletidak pernah negatif, sehingga tinggi baris tidak dapat dikurangi dengan pendekatan ini. Untuk menjawab pertanyaan, Anda harus menggunakan properti lain, lihat @ d.ennis menjawab.
Theo
81

Solusi yang dinyatakan di sini tidak bekerja untuk saya. Saya menemukan cara yang sedikit berbeda untuk melakukannya dengan iOS 6 NSAttributeString:

myLabel.numberOfLines = 0; 
NSString* string = @"String with line one. \n Line two. \n Line three.";
NSMutableParagraphStyle *style  = [[NSMutableParagraphStyle alloc] init];
style.minimumLineHeight = 30.f;
style.maximumLineHeight = 30.f;
NSDictionary *attributtes = @{NSParagraphStyleAttributeName : style,};
myLabel.attributedText = [[NSAttributedString alloc] initWithString:string
                                                         attributes:attributtes];   
[myLabel sizeToFit];
d.ennis
sumber
1
Tinggi baris tergantung pada ukuran font. Spasi garis hanya itu, spasi baris. Anda mungkin mendapatkan hal-hal untuk dikerjakan hanya dengan mengatur tinggi garis min / max, tetapi itu hanya karena ukuran font saat ini yang Anda gunakan tidak lebih besar dari batas ketinggian garis. Per dokumentasi: "... mesin terbang dan gambar melebihi ketinggian ini akan tumpang tindih garis tetangga ... Meskipun batas ini berlaku untuk garis itu sendiri, penspasian garis menambah ruang ekstra antara garis yang berdekatan."
Ari Braginsky
+1, Jika Anda ingin mengurangi jarak antar baris, inilah yang ingin Anda lakukan. Penspasian garis nyata kemungkinan besar adalah 0 secara default, inilah mengapa orang melaporkan Anda hanya dapat meningkatkannya. Masalah dengan jarak yang terlalu besar berasal dari ketinggian garis yang terlalu besar, inilah mengapa ini akan menyelesaikan pekerjaan 99%.
lawicko
1
Ini adalah satu-satunya jawaban yang dapat saya temukan yang menggunakan nilai tinggi garis aktual (bukan rasio) yang umum untuk merancang aplikasi seperti Photoshop, Sketsa, CSS, dll.
Albert Bori
35

Saya telah membuat ekstensi sederhana ini yang berfungsi sangat baik bagi saya:

extension UILabel {
    func setLineHeight(lineHeight: CGFloat) {
        let paragraphStyle = NSMutableParagraphStyle()
        paragraphStyle.lineSpacing = 1.0
        paragraphStyle.lineHeightMultiple = lineHeight
        paragraphStyle.alignment = self.textAlignment

        let attrString = NSMutableAttributedString()
        if (self.attributedText != nil) {
            attrString.append( self.attributedText!)
        } else {
            attrString.append( NSMutableAttributedString(string: self.text!))
            attrString.addAttribute(NSAttributedStringKey.font, value: self.font, range: NSMakeRange(0, attrString.length))
        }
        attrString.addAttribute(NSAttributedStringKey.paragraphStyle, value:paragraphStyle, range:NSMakeRange(0, attrString.length))
        self.attributedText = attrString
    }
}

Salin ini dalam file, jadi Anda dapat menggunakannya seperti ini

myLabel.setLineHeight(0.7)
Agustin Meriles
sumber
ingat jika Anda melakukan ini saat Anda juga menggunakan Storyboard untuk label ini, maka pastikan untuk mengatur garis label Anda ke 0
Honey
Mengapa Anda tidak langsung mengatur lineSpacingdan melupakan pengaturan lineHeightMultiple?
Sayang
Karena kunci untuk mengurangi ketinggian garis adalah 'lineHeightMultiple', no lineSpacing
Agustin Meriles
katakanlah Anda ingin tinggi baris Anda menjadi 1,4, mengapa Anda tidak bisa hanya menulis .lineSpacing = 1.4dan melupakan semua tentang .lineHeightMultiple...
Honey
Hah! Saya mencoba, dan saya tidak bekerja, tetapi saya bertanya-tanya mengapa saya tidak melihat jawaban lain di sini tidak menggunakan mekanisme Anda, maksud saya mereka langsung mengatur lineSpacing. Lihat jawaban yang diterima ...
Sayang
33

Dari Interface Builder (Storyboard / XIB):

masukkan deskripsi gambar di sini

Secara terprogram:

SWift 4

Menggunakan ekstensi label

extension UILabel {

    // Pass value for any one of both parameters and see result
    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 panggil fungsi ekstensi

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 label instance (Cukup salin & jalankan kode ini untuk melihat hasilnya)

let label = UILabel()
let stringValue = "How to\ncontrol\nthe\nline spacing\nin UILabel"
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 = "How to\ncontrol\nthe\nline spacing\nin UILabel"
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
Krunal
sumber
2
Tambahkan baris "paragraphStyle.alignment = self.textAlignment" untuk menjaga perataan asli. Jika tidak, teks akan dibiarkan rata.
Nithin Michael
Bagi siapa pun yang kehilangan ellipsis pada teks besar, maka gunakan: paragraphStyle.lineBreakMode = .byTruncatingTail
christostsang
16

Ini adalah kelas yang mensubklasifikasikan UILabel untuk memiliki properti line-height: https://github.com/LemonCake/MSLabel

adriendenat
sumber
Ini berhasil untuk saya, terima kasih. Saya juga mencoba menggunakan MTLabel, tetapi yang ini lebih baik.
Denis Kutlubaev
1
Adakah yang tahu kalau MSLabel mendukung karakter '\ n'?
achi
11

Di Swift dan sebagai fungsi, terinspirasi oleh DarkDust

// Usage: setTextWithLineSpacing(myEpicUILabel,text:"Hello",lineSpacing:20)
func setTextWithLineSpacing(label:UILabel,text:String,lineSpacing:CGFloat)
{
    let paragraphStyle = NSMutableParagraphStyle()
    paragraphStyle.lineSpacing = lineSpacing

    let attrString = NSMutableAttributedString(string: text)
    attrString.addAttribute(NSAttributedString.Key.paragraphStyle, value:paragraphStyle, range:NSMakeRange(0, attrString.length))

    label.attributedText = attrString
}
Thyselius
sumber
7

Menurut @Mike 's Jawaban, mengurangi lineHeightMultipleadalah titik kunci. Contoh di bawah, ini bekerja dengan baik untuk saya:

    NSString* text = label.text;
    CGFloat textWidth = [text sizeWithAttributes:@{NSFontAttributeName: label.font}].width;
    if (textWidth > label.frame.size.width) {
        NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc] init];
        paragraph.alignment = NSTextAlignmentCenter;
        paragraph.lineSpacing = 1.0f;
        paragraph.lineHeightMultiple = 0.75;     // Reduce this value !!!
        NSMutableAttributedString* attrText = [[NSMutableAttributedString alloc] initWithString:text];
        [attrText addAttribute:NSParagraphStyleAttributeName value:paragraph range:NSMakeRange(0, text.length)];
        label.attributedText = attrText;
    }
isaacselement
sumber
6

SWIFT 3 ekstensi berguna untuk mengatur ruang antar baris dengan lebih mudah :)

extension UILabel
{
    func setLineHeight(lineHeight: CGFloat)
    {
        let text = self.text
        if let text = text 
        {

            let attributeString = NSMutableAttributedString(string: text)
            let style = NSMutableParagraphStyle()

           style.lineSpacing = lineHeight
           attributeString.addAttribute(NSParagraphStyleAttributeName,
                                        value: style,
                                        range: NSMakeRange(0, text.characters.count))

           self.attributedText = attributeString
        }
    }
}
Kevin Sabbe
sumber
5

Saya telah menemukan cara di mana Anda dapat mengatur ketinggian garis nyata (bukan faktor) dan bahkan menjadikannya langsung di Interface Builder . Cukup ikuti instruksi di bawah ini. Kode ditulis dalam Swift 4 .


Langkah # 1: Buat file bernama DesignableLabel.swiftdan masukkan kode berikut:

import UIKit

@IBDesignable
class DesignableLabel: UILabel {
    @IBInspectable var lineHeight: CGFloat = 20 {
        didSet {
            let paragraphStyle = NSMutableParagraphStyle()
            paragraphStyle.minimumLineHeight = lineHeight
            paragraphStyle.maximumLineHeight = lineHeight
            paragraphStyle.alignment = self.textAlignment

            let attrString = NSMutableAttributedString(string: text!)
            attrString.addAttribute(NSAttributedStringKey.font, value: font, range: NSRange(location: 0, length: attrString.length))
            attrString.addAttribute(NSAttributedStringKey.paragraphStyle, value: paragraphStyle, range: NSRange(location: 0, length: attrString.length))
            attributedText = attrString
        }
    }
}

Langkah # 2: Tempatkan UILabelke Storyboard / XIB dan atur kelasnya DesignableLabel. Tunggu proyek Anda dibangun (build harus berhasil!).

Menentukan kelas untuk UILabel Anda


Langkah 3: Sekarang Anda akan melihat properti baru di panel properti bernama "Line Height". Cukup tetapkan nilai yang Anda suka dan Anda akan segera melihat hasilnya!

Setel Ketinggian Garis pada properti

Astaga
sumber
2

Ini adalah subkelas dari UILabel yang mengatur lineHeightMultipledan memastikan ketinggian intrinsik cukup besar untuk tidak memotong teks.

@IBDesignable
class Label: UILabel {
    override var intrinsicContentSize: CGSize {
        var size = super.intrinsicContentSize
        let padding = (1.0 - lineHeightMultiple) * font.pointSize
        size.height += padding
        return size
    }

    override var text: String? {
        didSet {
            updateAttributedText()
        }
    }

    @IBInspectable var lineHeightMultiple: CGFloat = 1.0 {
        didSet {
            updateAttributedText()
        }
    }

    private func updateAttributedText() {
        let paragraphStyle = NSMutableParagraphStyle()
        paragraphStyle.lineHeightMultiple = lineHeightMultiple
        attributedText = NSAttributedString(string: text ?? "", attributes: [
            .font: font,
            .paragraphStyle: paragraphStyle,
            .foregroundColor: textColor
        ])
        invalidateIntrinsicContentSize()
    }
}
Phatmann
sumber
padding tambahan harus (lineHeightMultiple - 1.0) * font.pointSize, kan?
Pavel Alexeev
Kode di atas seperti apa tampaknya bekerja untuk saya. Tapi mungkin Anda benar. Apakah Anda mencoba perubahan Anda? @PavelAlexeev
phatmann
Tidak, saya tetap menggunakan lineSpacing alih-alih lineHeightMultiple :)
Pavel Alexeev
1

Di Swift 2.0 ...

Tambahkan ekstensi:

extension UIView {
    func attributesWithLineHeight(font: String, color: UIColor, fontSize: CGFloat, kern: Double, lineHeightMultiple: CGFloat) -> [String: NSObject] {
        let titleParagraphStyle = NSMutableParagraphStyle()
        titleParagraphStyle.lineHeightMultiple = lineHeightMultiple

        let attribute = [
            NSForegroundColorAttributeName: color,
            NSKernAttributeName: kern,
            NSFontAttributeName : UIFont(name: font, size: fontSize)!,
            NSParagraphStyleAttributeName: titleParagraphStyle
        ]
        return attribute
    }
}

Sekarang, atur UILabel Anda sebagai attributedText:

self.label.attributedText = NSMutableAttributedString(string: "SwiftExample", attributes: attributesWithLineHeight("SourceSans-Regular", color: UIColor.whiteColor(), fontSize: 20, kern: 2.0, lineHeightMultiple: 0.5))    

Jelas, saya menambahkan banyak parameter yang mungkin tidak Anda butuhkan. Bermain-main - jangan ragu untuk menulis ulang metodenya - Saya mencari ini pada banyak jawaban yang berbeda sehingga saya akan memposting seluruh ekstensi seandainya itu membantu seseorang di luar sana ... -rab

rab_w
sumber
1

Swift3 - Dalam ekstensi UITextView atau UILabel, tambahkan fungsi ini:

Saya menambahkan beberapa kode untuk menjaga teks yang dikaitkan saat ini jika Anda sudah menggunakan string yang dikaitkan dengan tampilan (alih-alih menimpa mereka).

func setLineHeight(_ lineHeight: CGFloat) {
    guard let text = self.text, let font = self.font else { return }

    let paragraphStyle = NSMutableParagraphStyle()
    paragraphStyle.lineSpacing = 1.0
    paragraphStyle.lineHeightMultiple = lineHeight
    paragraphStyle.alignment = self.textAlignment

    var attrString:NSMutableAttributedString
    if let attributed = self.attributedText {
        attrString = NSMutableAttributedString(attributedString: attributed)
    } else {
        attrString = NSMutableAttributedString(string: text)
        attrString.addAttribute(NSFontAttributeName, value: font, range: NSMakeRange(0, attrString.length))
    }
    attrString.addAttribute(NSParagraphStyleAttributeName, value:paragraphStyle, range:NSMakeRange(0, attrString.length))
    self.attributedText = attrString
}
rmooney
sumber
1

Jawaban lain ... Jika Anda meneruskan string secara terprogram, Anda harus meneruskan string yang dikaitkan sebagai string biasa dan mengubah gayanya. (IOS10)

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;
Ricardo Mutti
sumber
1

Ekstensi Swift 3:

    import UIKit

extension UILabel {
    func setTextWithLineSpacing(text: String, lineHeightMultiply: CGFloat = 1.3) {
        let paragraphStyle = NSMutableParagraphStyle()
        paragraphStyle.lineHeightMultiple = lineHeightMultiply
        paragraphStyle.alignment = .center
        let attributedString = NSMutableAttributedString(string: text)
        attributedString.addAttribute(NSParagraphStyleAttributeName, value: paragraphStyle, range: NSRange(location: 0, length: attributedString.length))
        self.attributedText = attributedString
    }
}
Roman Barzyczak
sumber
1

Ini seharusnya membantu. Anda kemudian dapat menetapkan label Anda ke kelas khusus ini di storyboard dan menggunakan parameter itu langsung di dalam properti:

open class SpacingLabel : UILabel {

    @IBInspectable open var lineHeight:CGFloat = 1 {
        didSet {
            let paragraphStyle = NSMutableParagraphStyle()
            paragraphStyle.lineSpacing = 1.0
            paragraphStyle.lineHeightMultiple = self.lineHeight
            paragraphStyle.alignment = self.textAlignment

            let attrString = NSMutableAttributedString(string: self.text!)
            attrString.addAttribute(NSAttributedStringKey.font, value: self.font, range: NSMakeRange(0, attrString.length))
            attrString.addAttribute(NSAttributedStringKey.paragraphStyle, value:paragraphStyle, range:NSMakeRange(0, attrString.length))
            self.attributedText = attrString
        }
    } 
}
Russell Warwick
sumber
Ini seharusnya membantu. Anda kemudian dapat menetapkan label Anda ke kelas khusus ini di storyboard dan menggunakan parameter itu langsung di dalam properti.
Russell Warwick
tolong jangan menaruh konten yang terkait dengan jawaban Anda di komentar. jawaban Anda harus membantu tanpa harus membaca komentar
Neuron
1

Ekstensi label Swift 4. Membuat NSMutableAttributedString sebelum meneruskan ke fungsi seandainya ada atribut tambahan yang diperlukan untuk teks yang dikaitkan.

extension UILabel {

    func setLineHeightMultiple(to height: CGFloat, withAttributedText attributedText: NSMutableAttributedString) {

        let paragraphStyle = NSMutableParagraphStyle()
        paragraphStyle.lineSpacing = 1.0
        paragraphStyle.lineHeightMultiple = height
        paragraphStyle.alignment = textAlignment

        attributedText.addAttribute(.paragraphStyle, value: paragraphStyle, range: NSRange(location: 0, length: attributedText.length - 1))

        self.attributedText = attributedText
    }
}
Edward
sumber
0

Kode ini bekerja untuk saya (ios 7 & ios 8 pasti).

_label.numberOfLines=2;
_label.textColor=[UIColor whiteColor];

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineHeightMultiple=0.5;
paragraphStyle.alignment = NSTextAlignmentCenter;
paragraphStyle.lineSpacing = 1.0;

NSDictionary *nameAttributes=@{
                               NSParagraphStyleAttributeName : paragraphStyle,
                               NSBaselineOffsetAttributeName:@2.0
                               };


NSAttributedString *string=[[NSAttributedString alloc] initWithString:@"22m\nago" attributes:nameAttributes];
_label.attributedText=string;
daniel kilinskas
sumber
0

Inilah solusi saya dengan cepat. Subkelas harus bekerja untuk properti attributText dan teks dan untuk characterSpacing + lineSpacing. Ini mempertahankan spasi jika string baru atau attributString diatur.

open class UHBCustomLabel : UILabel {
    @IBInspectable open var characterSpacing:CGFloat = 1 {
        didSet {
            updateWithSpacing()
        }

    }
    @IBInspectable open var lines_spacing:CGFloat = -1 {
        didSet {
            updateWithSpacing()
        }

    }
    open override var text: String? {
        set {
            super.text = newValue
            updateWithSpacing()
        }
        get {
            return super.text
        }
    }
    open override var attributedText: NSAttributedString? {
        set {
            super.attributedText = newValue
            updateWithSpacing() 
        }
        get {
            return super.attributedText
        }
    }
    func updateWithSpacing() {
        let attributedString = self.attributedText == nil ? NSMutableAttributedString(string: self.text ?? "") : NSMutableAttributedString(attributedString: attributedText!)
        attributedString.addAttribute(NSKernAttributeName, value: self.characterSpacing, range: NSRange(location: 0, length: attributedString.length))
        if lines_spacing >= 0 {
            let paragraphStyle = NSMutableParagraphStyle()
            paragraphStyle.lineSpacing = lines_spacing
            paragraphStyle.alignment = textAlignment
            attributedString.addAttribute(NSParagraphStyleAttributeName, value:paragraphStyle, range:NSMakeRange(0, attributedString.length))
        }
        super.attributedText = attributedString
    }
}
Umair
sumber
-5

Sebagai solusi cepat-kotor-pintar-sederhana:

Untuk label UIL yang tidak memiliki banyak baris, Anda dapat menggunakan stackViews.

  1. Untuk setiap baris, tulis label baru.
  2. Sematkan mereka ke dalam StackView. (Pilih kedua label -> Editor -> Embed In -> StackView
  3. Sesuaikan SpacingStackView dengan jumlah yang Anda inginkan

Pastikan untuk menumpuknya secara vertikal . Solusi ini juga berfungsi untuk font khusus.

masukkan deskripsi gambar di sini

Madu
sumber
FWIW ini adalah solusi yang mengerikan namun bisa diterapkan. Karena itu saya menyimpannya.
Sayang
Saya juga telah melihat prinsip iOS dev menggunakan stackviews untuk membuat grafik. Stackviews sangat kuat
Sayang