ios iphone objective-c uilabel nsattributedstring

NSAttributedString ignora Autoshrink y numberOfLines para UILabel(iOS 6)



iphone objective-c (3)

Tengo UILabel con número de líneas = 2 tamaño de fuente del sistema = 15 tamaño de fuente mínimo = 8 modo de salto de línea - truncar cola

Cuando configuro texto largo que tiene el tipo NSString para UILabel, funciona bien y muestra texto de varias líneas (escalado si es necesario). Cuando intento configurar el texto con el tipo NSAttributedString, se ignora el tamaño de fuente mínimo y el Autoshrink, por lo que veo una línea de texto con el tamaño de fuente máximo.

¿Es posible resolver este problema?

Se ve algo como esto (el tamaño de la etiqueta es constante)

----------------------- | normal NSString Text| | very very long ... | ----------------------- --------------------------- |NSAttributedString tex...| ---------------------------


Encontré una manera de hacer esto:

label.adjustsFontSizeToFitWidth = true label.attributedText = attributedString label.lineBreakMode = .ByTruncatingTail // this did the trick!

Solo funciona si la tercera línea se establece después de establecer la cadena atribuida. Parece que la cadena atribuida anula el comportamiento de salto de línea cuando se establece (entre otras cosas).


minimumFontSize está en desuso a partir de iOS6. Además, ajustaFontSizeToFitWidth solo funciona cuando numberOfLines se establece en 1. UILabel no cambiará el tamaño del texto en varias líneas porque existe ambigüedad en el manejo de los saltos de línea al tiempo que se reduce la fuente.

Use minimumScaleFactor para establecer el tamaño más pequeño al que se debe escalar el texto.

El siguiente código poblará una UILabel con una cadena de tamaño de fuente 20 y se reducirá a la mitad hasta un tamaño mínimo de 10.

self.label.lineBreakMode = NSLineBreakByTruncatingTail; NSMutableAttributedString *hogan = [[NSMutableAttributedString alloc] initWithString:@"Presenting the great... Hulk Hogan! Presenting the great... Hulk Hogan! Presenting the great... Hulk Hogan! Presenting the great... Hulk Hogan! Presenting the great... Hulk Hogan! Presenting the great... Hulk Hogan! Presenting the great... Hulk Hogan!"]; [hogan addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:20.0] range:NSMakeRange(0, [hogan length])]; [self.label setAttributedText:hogan]; self.label.adjustsFontSizeToFitWidth = YES; self.label.numberOfLines = 1; self.label.minimumScaleFactor = 0.5;


NSMutableAttributedString *muAtrStr = [[NSMutableAttributedString alloc]initWithString:@"2"]; NSAttributedString *atrStr = [[NSAttributedString alloc]initWithString:@"/ndays" attributes:@{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Bold" size:8]}]; [muAtrStr appendAttributedString:atrStr]; self.lbl.numberOfLines = 0; [self.lbl setAttributedText:muAtrStr];