una tanto solo sirve samsung quitar que porque para manager evitar como borrar automáticamente app actualizacion actualiza actualice iphone cocoa-touch uikit uilabel

iphone - tanto - ¿Cómo averiguar el tamaño de fuente de una UILabel cuando-adjustsFontSizeToFitWidth se establece en SÍ?



porque se actualiza tanto facebook (4)

Cuando myLabel.adjustsFontSizeToFitWidth = YES , UILabel ajustará el tamaño de la fuente automáticamente en caso de que el texto sea demasiado largo para la etiqueta. Por ejemplo, si mi etiqueta solo tiene 100 píxeles de ancho y mi texto es demasiado largo para ajustarse al tamaño de fuente actual, se reducirá el tamaño de la fuente hasta que el texto se ajuste a la etiqueta.

Necesito obtener el tamaño de fuente real mostrado de UILabel cuando el tamaño de fuente se redujo. Por ejemplo, digamos que mi tamaño de fuente era en realidad de 20, pero UILabel tuvo que reducirlo a 10. Cuando le pido a UILabel la fuente y el tamaño de fuente, obtengo el tamaño de fuente anterior (20), pero no el que se muestra. (10).


En caso de que alguien todavía necesite la respuesta. En iOS9 puede usar boundingRectWithSize:options:context: para calcular el tamaño de fuente real. Tenga en cuenta que context.minimumScaleFactor no debe ser 0.0 para que la escala funcione.

- (CGFloat)adjustedFontSizeForLabel:(UILabel *)label { NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithAttributedString:label.attributedText]; [text setAttributes:@{NSFontAttributeName:label.font} range:NSMakeRange(0, text.length)]; NSStringDrawingContext *context = [NSStringDrawingContext new]; context.minimumScaleFactor = label.minimumScaleFactor; [text boundingRectWithSize:label.frame.size options:NSStringDrawingUsesLineFragmentOrigin context:context]; CGFloat adjustedFontSize = label.font.pointSize * context.actualScaleFactor; return adjustedFontSize; }


No estoy seguro de si esto es totalmente exacto, pero espero que sea bastante cercano. Es posible que no tenga en cuenta las cadenas truncadas o la altura de la etiqueta, pero eso es algo que puede hacer manualmente.

El método

- (CGSize) sizeWithFont: (UIFont *) minFontSize de fuente: (CGFloat) minFontSize actualFontSize: (CGFloat *) actualFontSize forWidth: (CGFloat) width lineBreakMode: (UILineBreakMode) lineBreakMode

devolverá el tamaño del texto y notará que también tiene un parámetro de referencia para el tamaño de fuente real utilizado.


Para una línea UILabel funciona bien esta solución simple:

//myLabel - initial label UILabel *fullSizeLabel = [UILabel new]; fullSizeLabel.font = myLabel.font; fullSizeLabel.text = myLabel.text; [fullSizeLabel sizeToFit]; CGFloat actualFontSize = myLabel.font.pointSize * (myLabel.bounds.size.width / fullSizeLabel.bounds.size.width); //correct, if new font size bigger than initial actualFontSize = actualFontSize < myLabel.font.pointSize ? actualFontSize : myLabel.font.pointSize;


Swift 3

override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() func adjustedFontSizeForLabel(_ label: UILabel) -> CGFloat { let text: NSMutableAttributedString = NSMutableAttributedString(attributedString: label.attributedText!) text.setAttributes([NSFontAttributeName: label.font], range: NSMakeRange(0, text.length)) let context: NSStringDrawingContext = NSStringDrawingContext() context.minimumScaleFactor = label.minimumScaleFactor text.boundingRect(with: label.frame.size, options: NSStringDrawingOptions.usesLineFragmentOrigin, context: context) let adjustedFontSize: CGFloat = label.font.pointSize * context.actualScaleFactor return adjustedFontSize } print(adjustedFontSizeForLabel(yourLabel)) }