Apakah mungkin untuk secara otomatis mengubah ukuran kotak / batas UIL agar sesuai dengan teks yang terkandung? (Saya tidak peduli jika ujungnya lebih besar dari tampilan)
Jadi, jika pengguna memasukkan "halo" atau "nama saya sangat panjang, saya ingin masuk ke dalam kotak ini", tidak pernah terpotong dan labelnya 'diperlebar' sesuai?
ios
iphone
objective-c
uilabel
wayneh
sumber
sumber
Jawaban:
Silakan periksa inti saya di mana saya telah membuat kategori
UILabel
untuk sesuatu yang sangat mirip, kategori saya memungkinkanUILabel
peregangan itu tinggi untuk menampilkan semua konten: https://gist.github.com/1005520Atau lihat pos ini: https://stackoverflow.com/a/7242981/662605
Ini akan meregangkan ketinggian, tetapi Anda dapat mengubahnya dengan mudah untuk bekerja dengan cara lain dan meregangkan lebar dengan sesuatu seperti ini, yang saya percaya apa yang ingin Anda lakukan:
Anda bisa lebih mudah menggunakan
sizeToFit
metode yang tersedia dariUIView
kelas, tetapi atur jumlah baris menjadi 1 agar aman.Pembaruan iOS 6
Jika Anda menggunakan AutoLayout, maka Anda memiliki solusi bawaan. Dengan mengatur jumlah baris ke 0, kerangka kerja akan mengubah ukuran label Anda dengan tepat (menambahkan lebih banyak tinggi) agar sesuai dengan teks Anda.
Pembaruan iOS 8
sizeWithFont:
sudah usang jadi gunakansizeWithAttributes:
saja:sumber
Menggunakan
[label sizeToFit];
akan mencapai hasil yang sama dari Kategori Daniels.Meskipun saya sarankan untuk menggunakan autolayout dan biarkan label mengubah ukurannya sendiri berdasarkan kendala.
sumber
Jika kita ingin yang
UILabel
menyusut dan berkembang berdasarkan ukuran teks maka storyboard dengan autolayout adalah pilihan terbaik. Di bawah ini adalah langkah-langkah untuk mencapai iniLangkah
Letakkan UILabel di view controller dan letakkan di mana pun Anda inginkan. Juga menempatkan
0
untuknumberOfLines
propertiUILabel
.Berikan batasan pin space Top, Leading, dan Trailing.
Update Frame
dan klikFix Misplacement
. Sekarang, UILabel ini akan menyusut jika teks kurang dan berkembang jika teks lebih banyak.sumber
Ini tidak serumit beberapa jawaban lainnya.
Sematkan tepi kiri dan atas
Cukup gunakan tata letak otomatis untuk menambahkan batasan untuk menyematkan sisi kiri dan atas label.
Setelah itu akan secara otomatis mengubah ukuran.
Catatan
Tidak perlu diatur
sizeToFit
saat menggunakan tata letak otomatis. Kode lengkap saya untuk proyek contoh ada di sini:myLabel.preferredMaxLayoutWidth = 150 // or whatever
kode. (Saya juga menyematkan tombol saya ke bagian bawah label sehingga akan bergerak turun ketika ketinggian label meningkat.)UITableViewCell
maka lihat jawaban ini .sumber
Gunakan
[label sizeToFit];
untuk menyesuaikan teks dalam UILabelsumber
Saya membuat beberapa metode berdasarkan jawaban Daniel di atas.
sumber
Inilah yang saya temukan bekerja untuk situasi saya:
1) Tinggi UILabel memiliki batasan> = 0 menggunakan autolayout. Lebar diperbaiki. 2) Tetapkan teks ke dalam UILabel, yang sudah memiliki superview pada saat itu (tidak yakin seberapa vital itu). 3) Lalu, lakukan:
Tinggi label sekarang diatur dengan tepat.
sumber
Ini adalah metode kategori. Anda harus mengatur teks terlebih dahulu, daripada memanggil metode ini untuk menyesuaikan ketinggian UILabel.
sumber
Anda dapat mengukur label Anda sesuai dengan teks dan kontrol terkait lainnya menggunakan dua cara-
Untuk iOS 7.0 ke atas
sebelum iOS 7.0 ini dapat digunakan untuk menghitung ukuran label
// membingkai ulang kontrol lain berdasarkan labelTextHeight
Jika Anda tidak ingin menghitung ukuran teks label daripada Anda dapat menggunakan -sizeToFit pada contoh UILabel as-
// setelah ini Anda bisa mendapatkan bingkai label untuk membingkai ulang kontrol terkait lainnya
sumber
[label sizeToFit];
viewDidLoadsumber
Saya memiliki masalah besar dengan tata letak otomatis. Kami memiliki dua wadah di dalam sel tabel. Wadah kedua ukurannya tergantung pada deskripsi Item (0 - 1000 karakter), dan baris harus diubah ukurannya berdasarkan itu.
Bahan yang hilang adalah kendala dasar untuk deskripsi.
Saya telah mengubah batasan bawah elemen dinamis dari = 0 ke > = 0 .
sumber
Cocok setiap saat! :)
sumber
Anda dapat menampilkan satu output garis kemudian mengatur properti Line = 0 dan menunjukkan beberapa output baris kemudian mengatur properti Line = 1 dan lebih banyak
sumber
Ada juga pendekatan ini:
sumber
changeTextWithAutoHeight:width:
metodeUILabel
. Bisakah Anda memberikan tautan ke tempat dalam dokumentasi UIKit metode ini dapat ditemukan.