Silakan periksa inti saya di mana saya telah membuat kategori UILabel
untuk sesuatu yang sangat mirip, kategori saya memungkinkan UILabel
peregangan itu tinggi untuk menampilkan semua konten: https://gist.github.com/1005520
Atau 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:
@implementation UILabel (dynamicSizeMeWidth)
- (void)resizeToStretch{
float width = [self expectedWidth];
CGRect newFrame = [self frame];
newFrame.size.width = width;
[self setFrame:newFrame];
}
- (float)expectedWidth{
[self setNumberOfLines:1];
CGSize maximumLabelSize = CGSizeMake(CGRectGetWidth(self.bounds), CGFLOAT_MAX);
CGSize expectedLabelSize = [[self text] sizeWithFont:[self font]
constrainedToSize:maximumLabelSize
lineBreakMode:[self lineBreakMode]];
return expectedLabelSize.width;
}
@end
Anda bisa lebih mudah menggunakan sizeToFit
metode yang tersedia dari UIView
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 gunakan sizeWithAttributes:
saja:
- (float)expectedWidth{
[self setNumberOfLines:1];
CGSize expectedLabelSize = [[self text] sizeWithAttributes:@{NSFontAttributeName:self.font}];
return expectedLabelSize.width;
}