Пожалуйста, проверьте мою суть, где я сделал категорию для 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;
}