Por favor revisa mi esencia donde he hecho una categoría para UILabel
algo muy similar, mi categoría permite UILabel
estirar su altura para mostrar todo el contenido: https://gist.github.com/1005520
O echa un vistazo a esta publicación: https://stackoverflow.com/a/7242981/662605
Esto estiraría la altura, pero puede cambiarla fácilmente para trabajar de otra manera y estirar el ancho con algo como esto, que creo que es lo que quiere hacer:
@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
Puede usar el sizeToFit
método disponible de la UIView
clase de manera más simple , pero establezca el número de líneas en 1 para que sea seguro.
actualización de iOS 6
Si está utilizando AutoLayout, entonces tiene una solución integrada. Al establecer el número de líneas en 0, el marco cambiará el tamaño de su etiqueta de manera apropiada (agregando más altura) para que se ajuste a su texto.
actualización de iOS 8
sizeWithFont:
está en desuso, así que use sizeWithAttributes:
en su lugar:
- (float)expectedWidth{
[self setNumberOfLines:1];
CGSize expectedLabelSize = [[self text] sizeWithAttributes:@{NSFontAttributeName:self.font}];
return expectedLabelSize.width;
}