Будь ласка, ознайомтеся з моєю суттю, де я створив категорію для UILabel
чогось дуже схожого, моя категорія дозволяє UILabel
розтягнути її висоту, щоб показати весь вміст: https://gist.github.com/1005520
Або ознайомтеся з цією публікацією: https://stackoverflow.com/a/7242981/662605
Це дозволить розтягнути висоту, але ви можете легко змінити її навколо, щоб працювати в інший бік і розтягнути ширину чимось таким, що я вважаю, що ви хочете зробити:
@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
Можна більш просто використовувати sizeToFit
метод, доступний у UIView
класі, але встановити кількість рядків у 1, щоб бути безпечним.
Оновлення iOS 6
Якщо ви використовуєте AutoLayout, у вас є вбудоване рішення. Встановивши кількість рядків на 0, рамка дозволить відповідним чином змінити розмір вашої мітки (додавши більше висоти), щоб відповідати вашому тексту.
Оновлення iOS 8
sizeWithFont:
застаріло, тож використовуйте sizeWithAttributes:
замість цього:
- (float)expectedWidth{
[self setNumberOfLines:1];
CGSize expectedLabelSize = [[self text] sizeWithAttributes:@{NSFontAttributeName:self.font}];
return expectedLabelSize.width;
}