Pertimbangkan saya memiliki teks berikut dalam UILabel
(garis panjang teks dinamis):
Karena pasukan alien jauh melebihi jumlah tim, pemain harus menggunakan dunia pasca-apokaliptik untuk keuntungan mereka, seperti mencari perlindungan di balik tempat sampah, pilar, mobil, puing, dan benda lainnya.
Saya ingin mengubah ukuran UILabel's
ketinggian sehingga teks dapat masuk. Saya menggunakan properti berikut UILabel
untuk membuat teks di dalam untuk membungkus.
myUILabel.lineBreakMode = UILineBreakModeWordWrap;
myUILabel.numberOfLines = 0;
Tolong beri tahu saya jika saya tidak menuju ke arah yang benar. Terima kasih.
ios
cocoa-touch
uikit
uilabel
Mustafa
sumber
sumber
Jawaban:
sizeWithFont constrainedToSize:lineBreakMode:
adalah metode yang digunakan. Contoh cara menggunakannya adalah di bawah ini:sumber
[label sizeToFit]
.sizeWithFont
itu sudah usang di iOS 7. stackoverflow.com/questions/18897896/…Anda pergi ke arah yang benar. Yang perlu Anda lakukan adalah:
sumber
Di iOS 6 Apple telah menambahkan properti ke UILabel yang sangat menyederhanakan ukuran vertikal dinamis label: preferMaxLayoutWidth .
Menggunakan properti ini dalam kombinasi dengan lineBreakMode = NSLineBreakByWordWrapping dan metode sizeToFit memungkinkan dengan mudah mengubah ukuran instance UILabel ke ketinggian yang mengakomodasi seluruh teks.
Kutipan dari dokumentasi iOS:
Sebuah sampel:
sumber
Periksa pekerjaan ini dengan sempurna tanpa menambahkan satu baris kode. (Menggunakan Autolayout)
Saya membuat demo untuk Anda sesuai dengan kebutuhan Anda. Unduh dari tautan di bawah ini,
Autoresize UIView dan UILabel
Panduan langkah demi langkah: -
Langkah 1: - Tetapkan batasan untuk UIView
1) Leading 2) Top 3) Trailing (Dari mainview)
Langkah 2: - Tetapkan batasan ke Label 1
1) Leading 2) Top 3) Trailing (Dari itu superview)
Langkah 3: - Tetapkan constrain ke Label 2
1) Leading 2) Trailing (Dari superview-nya)
Langkah 4: - Beri botton paling rumit ke UILabel dari UIView.
Langkah 5: - (Opsional) Tetapkan batasan ke UIButton
1) Memimpin 2) Bawah 3) Membuntuti 4) Tinggi Tetap (Dari mainview)
Output: -
Catatan: - Pastikan Anda telah menetapkan Jumlah baris = 0 pada properti Label.
Saya harap info ini cukup untuk memahami Autoresize UIView menurut tinggi UILabel dan Autoresize UILabel Menurut teks.
sumber
Alih-alih melakukan ini secara terprogram, Anda bisa melakukan ini di Storyboard / XIB saat mendesain.
sumber
Terima kasih kawan untuk bantuan, ini kode yang saya coba yang berfungsi untuk saya
sumber
Solusi untuk iOS7 sebelumnya dan iOS7 di atas
sumber
Karena sizeWithFont sudah usang saya menggunakan yang ini sebagai gantinya.
ini mendapatkan atribut label khusus.
sumber
Ini adalah versi kategori:
UILabel + AutoSize.h #import
UILabel + AutoSize.m
sumber
Anda dapat menerapkan
TableViewController's
(UITableViewCell *)tableView:cellForRowAtIndexPath
metode dengan cara berikut (misalnya):Juga menggunakan
NSString
'ssizeWithFont:constrainedToSize:lineBreakMode:
metode untuk menghitung ketinggian teks.sumber
Ekstensi UILabel berdasarkan jawaban ini untuk Swift 4 dan di atasnya
Dapat digunakan seperti:
sumber
Dan bagi mereka yang bermigrasi ke iOS 8, berikut adalah ekstensi kelas untuk Swift:
sumber
Cara termudah dan lebih baik yang berhasil bagi saya adalah menerapkan batasan ketinggian pada label dan menetapkan prioritas ke rendah , yaitu (250) di storyboard.
Jadi Anda tidak perlu khawatir tentang menghitung tinggi dan lebar secara pemrograman, berkat storyboard.
sumber
Pendekatan saya untuk menghitung ketinggian dinamis UILabel.
Bungkus berfungsi:
sumber
Metode yang Diperbarui
sumber
Ini adalah satu baris kode untuk mendapatkan Tinggi UILabel menggunakan Objective-c:
dan menggunakan. tinggi Anda akan mendapatkan ketinggian label sebagai berikut:
sumber
Anda bisa mendapatkan tinggi menggunakan kode di bawah ini
Anda harus lulus
teks 2. font 3. lebar label
sumber
Terima kasih untuk posting ini. Itu sangat membantu saya. Dalam kasus saya, saya juga mengedit teks dalam controller tampilan terpisah. Saya perhatikan bahwa ketika saya menggunakan:
di tableView: cellForRowAtIndexPath: metode yang tampilan label terus diberikan di atas tampilan sebelumnya setiap kali saya mengedit sel. Teks menjadi pixelated, dan ketika sesuatu dihapus atau diubah, versi sebelumnya terlihat di bawah versi baru. Inilah cara saya memecahkan masalah:
Tidak ada lagi lapisan aneh. Jika ada cara yang lebih baik untuk menangani ini, Tolong beri tahu saya.
sumber
gunakan ini di sini semua properti digunakan pada label dan mengujinya dengan meningkatkan teks dalam itemTitle.text sebagai
itu akan menampilkan jawaban perfetc yang Anda butuhkan
sumber
Anda dapat menggunakannya sebagai metode juga. @ Pyjamasam sangat benar jadi saya hanya membuat metodenya. Mungkin bermanfaat bagi orang lain
dan atur seperti ini
sumber
Untuk melakukan ini di Swift3, berikut ini adalah kode:
sumber
Menambahkan ke jawaban di atas:
Ini dapat dengan mudah dicapai melalui storyboard.
sumber
Satu baris adalah jawaban Chris salah.
seharusnya
Selain itu, itu solusi yang tepat.
sumber
Akhirnya berhasil. Terima kasih kawan.
Saya tidak membuatnya berfungsi karena saya mencoba mengubah ukuran label pada
heightForRowAtIndexPath
metode:dan (yeah konyol saya), saya mengubah ukuran label ke default di
cellForRowAtIndexPath
metode - saya mengabaikan kode yang saya tulis sebelumnya:sumber
sumber
sumber
Kode saya:
sumber
Metode ini akan memberikan tinggi sempurna
sumber
Swift 2:
Garis yang menarik adalah
sizeToFit()
bersamaan dengan pengaturan aframe.size.height
ke max float, ini akan memberikan ruang untuk teks yang panjang, tetapisizeToFit()
akan memaksanya untuk hanya menggunakan yang diperlukan, tetapi SELALU memanggilnya setelah mengatur.frame.size.height
.Saya merekomendasikan pengaturan
.backgroundColor
untuk keperluan debug, dengan cara ini Anda dapat melihat bingkai yang diberikan untuk setiap kasus.sumber
yourLabel.frame.height
adalah properti hanya mendapatkanSilakan tentukan batasan untuk UILable di storyboard termasuk kanan kiri atas
sumber