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?
¿Has probado NSString sizeWithAttributes:?
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;