Saya ingin menampilkan gambar di sebelah UILabel, namun UILabel memiliki panjang teks variabel, jadi saya tidak tahu di mana harus menempatkan gambar. Bagaimana saya bisa mencapai ini?
142
CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font
constrainedToSize:maximumLabelSize
lineBreakMode:yourLabel.lineBreakMode];
Apa itu - [NSString sizeWithFont: forWidth: lineBreakMode:] bagus untuk?
pertanyaan ini mungkin punya jawaban Anda, itu berhasil untuk saya.
Untuk 2014, saya mengedit dalam versi baru ini, berdasarkan komentar ultra-praktis oleh Norbert di bawah ini! Ini melakukan segalanya. Bersulang
// yourLabel is your UILabel.
float widthIs =
[self.yourLabel.text
boundingRectWithSize:self.yourLabel.frame.size
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{ NSFontAttributeName:self.yourLabel.font }
context:nil]
.size.width;
NSLog(@"the width of yourLabel is %f", widthIs);
[yourString boundingRectWithSize:maximumLabelSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{ NSFontAttributeName:yourLabel.font } context:nil];
self.yourLabel.intrinsicContentSize
Ini akan memberi Anda ukuran konten label, sehingga Anda bisa mendapatkan lebar dari sana.yourLabel.intrinsicContentSize.width
bagus, periksa jawaban di bawah ini.yourLabel.intrinsicContentSize.width
untuk Objective-C / Swiftsumber
Dengan cepat
sumber
Jawaban yang dipilih benar untuk iOS 6 dan di bawah.
Di iOS 7,
sizeWithFont:constrainedToSize:lineBreakMode:
sudah usang . Sekarang disarankan Anda menggunakanboundingRectWithSize:options:attributes:context:
.Perhatikan bahwa nilai kembali
CGRect
bukan aCGSize
. Semoga itu akan menjadi bantuan bagi orang yang menggunakannya di iOS 7.sumber
Di iOS8 sizeWithFont telah ditinggalkan, lihat
Anda bisa menambahkan semua atribut yang Anda inginkan di sizeWithAttributes. Atribut lain yang dapat Anda atur:
dan seterusnya. Tapi mungkin Anda tidak akan membutuhkan yang lain
sumber
Swift 4 Jawab yang menggunakan Kendala
Swift 5 Jawab yang menggunakan Kendala
sumber
sumber
Inilah sesuatu yang saya buat setelah menerapkan beberapa prinsip posting SO lainnya, termasuk tautan Aaron:
Dalam contoh ini, saya menambahkan pin khusus ke kelas MKAnnotation yang mengubah ukuran UILabel sesuai dengan ukuran teks. Ini juga menambahkan gambar di sisi kiri tampilan, sehingga Anda melihat beberapa kode mengelola spasi yang tepat untuk menangani gambar dan bantalan.
Kuncinya adalah menggunakan
CGSize titleSize = [myAnnotation.THETEXT sizeWithFont:[UIFont systemFontOfSize:12]];
dan kemudian mendefinisikan kembali dimensi tampilan. Anda dapat menerapkan logika ini untuk tampilan apa pun.Meskipun jawaban Harun bekerja untuk beberapa orang, itu tidak berhasil untuk saya. Ini adalah penjelasan yang jauh lebih terperinci yang harus Anda coba segera sebelum pergi ke tempat lain jika Anda ingin tampilan yang lebih dinamis dengan gambar dan UILabel yang dapat diubah ukurannya. Saya sudah melakukan semua pekerjaan untuk Anda !!
sumber