ios objective-c uiscrollview uilabel sizetofit

ios - El método UILabel sizeToFit no funciona correctamente



objective-c uiscrollview (7)

Estoy tratando de mostrar un largo trozo de texto dentro de una UILabel en una línea. La UILabel es una subvista de UIScrollView, por lo que puedo desplazarme y ver la UILabel completa.

Mi problema es que el método sizeToFit solo funciona parcialmente.

textLabel.attributedText = attributedString; textLabel.numberOfLines = 1; [textLabel sizeToFit]; textScrollView.contentSize = CGSizeMake(textLabel.frame.size.width, textLabel.frame.size.height);

El tamaño del contenido de UIScrollView es lo suficientemente grande como para mostrar todo el UILable, pero para una línea como:

así que intentaré compartir algunos de ellos aquí de vez en cuando ".

La UILabel muestra:

así que trataré de compartir algo ...

¿Qué estoy haciendo mal?



La razón más común por la que sizeToFit no funciona correctamente es que UILabel no tiene ninguna restricción de reproducción automática, por ejemplo, si está confiando implícitamente en que la posición de la vista permanezca fija con respecto a la parte superior izquierda. La adición de cualquier restricción (inicial, superior, central Y, lo que sea) lo solucionará, probablemente porque dará lugar a que se layoutSubviews de layoutSubviews en algún momento, como se sugiere en la respuesta de Maxthon Chan.


Resulta que el código está bien, pero se comprobó el uso de Autolayout. Desactivado, todo funciona simplemente genial ...


Si quieres lograr esto con el diseño automático activado, es simple. Sólo asegúrese de agregar numberOfLines

textLabel.adjustsFontSizeToFitWidth = YES; textLabel.numberOfLines = 0;


Sorprendentemente, si no pusiera una restricción en el ancho de la etiqueta, esto funcionaría:

[textLabel.superview layoutSubviews];

Aprendí esto por ensayo y error.


Ya que ha restringido su Etiqueta para mostrar solo una línea de Texto y truncar el resto, se comporta de la misma manera

textLabel.attributedText = attributedString; textLabel.numberOfLines = 0; [textLabel sizeToFit]; textLabel.lineBreakMode = NSLineBreakByWordWrapping; textScrollView.contentSize = CGSizeMake(textLabel.frame.size.width, textLabel.frame.size.height);

Espero que te ayude


tratar

textLabel.adjustsFontSizeToFitWidth = YES; textLabel.minimumFontScale = 0.5;