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.
objective-c
swift
xcode
uilabel
line-spacing
Abhinav
sumber
sumber
UILabel
, lalu sematkan semua label dalam aStackView
. Akhirnya, sesuaikanspacing
dariStackView
. Ingatlah untuk menumpuknya secara vertikal.Jawaban:
Saya berpikir untuk menambahkan sesuatu yang baru ke jawaban ini, jadi saya tidak merasa seburuk ini ... Ini jawaban Swift :
"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.sumber
NSAttributedString
(juga tersedia di properti UILable di pembuat antarmuka Xcode).NSParagraphStyle
saat menggunakanNSAttributedString
. (Saya mungkin perlu melakukan lebih banyak pengujian terhadap properti yang dapat dimodifikasi lainnya, tetapilineSpacing
properti hanya memungkinkan Anda untuk meningkatkannya.)Di Xcode 6 Anda bisa melakukan ini di storyboard:
sumber
Mulai dari iOS 6 Anda dapat mengatur string yang dikaitkan dengan UILabel. Periksa yang berikut ini:
sumber
attributedString
harus menjadiNSMutableAttributedString
(BUKAN NSAttributedString)NSMutableAttributedString *attributedString = [NSMutableAttributedString alloc]initWithString:@"sample text"];
lineSpacing
milikNSMutableParagraphStyle
tidak pernah negatif, sehingga tinggi baris tidak dapat dikurangi dengan pendekatan ini. Untuk menjawab pertanyaan, Anda harus menggunakan properti lain, lihat @ d.ennis menjawab.Solusi yang dinyatakan di sini tidak bekerja untuk saya. Saya menemukan cara yang sedikit berbeda untuk melakukannya dengan iOS 6 NSAttributeString:
sumber
Saya telah membuat ekstensi sederhana ini yang berfungsi sangat baik bagi saya:
Salin ini dalam file, jadi Anda dapat menggunakannya seperti ini
sumber
lineSpacing
dan melupakan pengaturanlineHeightMultiple
?.lineSpacing = 1.4
dan melupakan semua tentang.lineHeightMultiple
...Dari Interface Builder (Storyboard / XIB):
Secara terprogram:
SWift 4
Menggunakan ekstensi label
Sekarang panggil fungsi ekstensi
Atau menggunakan label instance (Cukup salin & jalankan kode ini untuk melihat hasilnya)
Cepat 3
sumber
Ada jawaban alternatif sekarang di iOS 6, yaitu untuk menetapkan attributedText pada label, menggunakan NSAttributedString dengan gaya paragraf yang sesuai. Lihat jawaban overflow tumpukan ini untuk detail ketinggian baris dengan NSAttributedString:
Teks Inti - ketinggian garis NSAttributedString dilakukan dengan benar?
sumber
Ini adalah kelas yang mensubklasifikasikan UILabel untuk memiliki properti line-height: https://github.com/LemonCake/MSLabel
sumber
Di Swift dan sebagai fungsi, terinspirasi oleh DarkDust
sumber
Menurut @Mike 's Jawaban, mengurangi
lineHeightMultiple
adalah titik kunci. Contoh di bawah, ini bekerja dengan baik untuk saya:sumber
SWIFT 3 ekstensi berguna untuk mengatur ruang antar baris dengan lebih mudah :)
sumber
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.swift
dan masukkan kode berikut:Langkah # 2: Tempatkan
UILabel
ke Storyboard / XIB dan atur kelasnyaDesignableLabel
. Tunggu proyek Anda dibangun (build harus berhasil!).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!
sumber
Ini adalah subkelas dari UILabel yang mengatur
lineHeightMultiple
dan memastikan ketinggian intrinsik cukup besar untuk tidak memotong teks.sumber
Di Swift 2.0 ...
Tambahkan ekstensi:
Sekarang, atur UILabel Anda sebagai attributedText:
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
sumber
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).
sumber
Jawaban lain ... Jika Anda meneruskan string secara terprogram, Anda harus meneruskan string yang dikaitkan sebagai string biasa dan mengubah gayanya. (IOS10)
sumber
Ekstensi Swift 3:
sumber
Ini seharusnya membantu. Anda kemudian dapat menetapkan label Anda ke kelas khusus ini di storyboard dan menggunakan parameter itu langsung di dalam properti:
sumber
Ekstensi label Swift 4. Membuat NSMutableAttributedString sebelum meneruskan ke fungsi seandainya ada atribut tambahan yang diperlukan untuk teks yang dikaitkan.
sumber
Kode ini bekerja untuk saya (ios 7 & ios 8 pasti).
sumber
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.
sumber
Sebagai solusi cepat-kotor-pintar-sederhana:
Untuk label UIL yang tidak memiliki banyak baris, Anda dapat menggunakan stackViews.
Spacing
StackView dengan jumlah yang Anda inginkanPastikan untuk menumpuknya secara vertikal . Solusi ini juga berfungsi untuk font khusus.
sumber