Saya memiliki beberapa label yang ingin saya sesuaikan tingginya dengan teks, ini adalah kode yang saya tulis untuk ini sekarang
func heightForView(text:String, font:UIFont, width:CGFloat) -> CGFloat{
let label:UILabel = UILabel(frame: CGRectMake(0, 0, width, CGFloat.max))
label.numberOfLines = 0
label.lineBreakMode = NSLineBreakMode.ByWordWrapping
label.font = font
label.text = text
label.sizeToFit()
return label.frame.height
}
EDIT:
Masalahnya bukan pada bagian kode ini, jadi perbaikan saya ada pada pertanyaan itu sendiri. Mungkin masih berguna untuk orang lain!
sizeWithFont
mungkin tidak tersedia untuk SwiftString
tetapi tersedia diNSString
Anda masih dapat memanggilnya di sana.Jawaban:
Saya baru saja meletakkan ini di taman bermain dan berhasil untuk saya.
Diperbarui untuk Swift 4.0
Cepat 3:
sumber
UILabel
; jika metode ini digunakan di dalamlayoutSubviews
dengan kecenderungan untuk dipanggil beberapa kali per tata letak lengkap, pembuatan objek tambahan dapat menyebabkan penundaan yang nyata, terutama selama pengguliran.Jika Anda menggunakan AutoLayout , Anda dapat menyesuaikan
UILabel
ketinggian hanya dengan config UI.Untuk iOS8 atau lebih tinggi
UILabel
UILabel
dari 1 menjadi 0Untuk iOS7
UILabel
Equal
menjadiGreater than or Equal
UILabel
dari 1 menjadi 0Anda
UILabel
akan secara otomatis menambah tinggi tergantung pada teksnyasumber
Saya membuat ekstensi ini jika Anda mau
sumber
Saya memiliki solusi kerja yang kuat.
dalam tata letak
di penyetel teks:
UPD. tentunya dengan setting UILabel ini:
sumber
Hanya dengan mengatur:
Label secara otomatis menyesuaikan tingginya berdasarkan jumlah teks yang dimasukkan.
sumber
berdasarkan jawaban Anorak, saya juga setuju dengan perhatian Zorayr, jadi saya menambahkan beberapa baris untuk menghapus UILabel dan hanya mengembalikan CGFloat, saya tidak tahu apakah itu membantu karena kode asli tidak menambahkan UIabel, tetapi itu tidak membuang kesalahan, jadi saya menggunakan kode di bawah ini:
sumber
Dalam 4.1 cepat dan Xcode 9.4.1
Hanya 3 langkah
Langkah 1)
Langkah 2)
Langkah 3)
sumber
Solusi yang disarankan oleh Anorak sebagai properti yang dihitung dalam ekstensi untuk UILabel:
Pemakaian:
sumber
Mengikuti jawaban @Anorak, saya menambahkan ekstensi ini ke String dan mengirim inset sebagai parameter, karena sering kali Anda memerlukan padding ke teks Anda. Bagaimanapun, mungkin beberapa Anda akan menemukan ini berguna.
sumber
Berikut adalah cara menghitung tinggi teks di Swift. Anda kemudian bisa mendapatkan tinggi dari persegi dan mengatur ketinggian batasan label atau textView, dll.
sumber
panggil saja metode ini di mana Anda membutuhkan Tinggi dinamis untuk label
sumber
Swift 4.0.0
self.messageLabel = UILabel (bingkai: CGRect (x: 70, y: 60, lebar: UIScreen.main.bounds.width - 80, tinggi: 30)
Tautan ini menjelaskan cara papan cerita untuk melakukan hal yang sama
sumber
Swift 4.0.0
Alih-alih menghitung tinggi teks / label, saya hanya mengubah ukuran label setelah memasukkan teks (dinamis).
Asumsikan bahwa myLabel adalah UILabel yang dimaksud:
Dan sekarang sampai pada bagian yang menyenangkan:
sumber
The Swift 4.1 metode penyuluhan dengan tinggi label menghitung:
sumber
Swift 5, cara papan cerita XCode 11. Saya pikir ini berfungsi untuk iOS 9 dan lebih tinggi. Misalnya Anda ingin label "Deskripsi" untuk mendapatkan tinggi dinamis, ikuti langkah-langkah berikut:
1) Pilih label deskripsi -> Pergi ke Attributes Inspector (ikon pensil), setel: Lines: 0 Line Break: Word Wrap
2) Pilih UILabel Anda dari storyboard dan masuk ke Size Inspector (ikon penggaris), 3) Turun ke "Prioritas Resistensi Kompresi Konten ke 1 untuk semua komponen UIView lainnya (label, tombol, tampilan gambar, dll) yang berinteraksi dengan label Anda.
Misalnya, saya memiliki UIImageView, Label Judul, dan Label Deskripsi secara vertikal dalam tampilan saya. Saya menetapkan Prioritas Resistensi Kompresi Konten ke UIImageView dan label judul ke 1 dan untuk label deskripsi ke 750. Ini akan membuat label deskripsi mengambil ketinggian sebanyak yang diperlukan.
sumber
Untuk membuat label dinamis dengan cepat, jangan beri konstar tinggi dan di storyboard buat label sejumlah baris 0 juga berikan batasan bawah dan ini adalah cara terbaik saya menangani label dinamis sesuai ukuran isinya.
sumber
Anda juga bisa menggunakan
sizeThatFits
fungsi.Sebagai contoh:
label.sizeThatFits(superView.frame.size).height
sumber