Por favor, verifique minha essência onde eu fiz uma categoria para UILabel
algo muito semelhante; minha categoria permite UILabel
esticar sua altura para mostrar todo o conteúdo: https://gist.github.com/1005520
Ou confira esta publicação: https://stackoverflow.com/a/7242981/662605
Isso aumentaria a altura, mas você pode alterá-la facilmente para trabalhar de outra maneira e aumentar a largura com algo parecido com isto, que é o que você deseja fazer:
@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
Você poderia simplesmente usar o sizeToFit
método disponível na UIView
classe, mas defina o número de linhas como 1 para ser seguro.
atualização para iOS 6
Se você estiver usando o AutoLayout, terá uma solução integrada. Ao definir o número de linhas como 0, a estrutura redimensionará seu rótulo adequadamente (adicionando mais altura) para caber no seu texto.
atualização para iOS 8
sizeWithFont:
está obsoleto, então use sizeWithAttributes:
:
- (float)expectedWidth{
[self setNumberOfLines:1];
CGSize expectedLabelSize = [[self text] sizeWithAttributes:@{NSFontAttributeName:self.font}];
return expectedLabelSize.width;
}