Estoy tratando de calcular la altura de un UILabel en función de diferentes longitudes de cadena.
func calculateContentHeight() -> CGFloat{
var maxLabelSize: CGSize = CGSizeMake(frame.size.width - 48, CGFloat(9999))
var contentNSString = contentText as NSString
var expectedLabelSize = contentNSString.boundingRectWithSize(maxLabelSize, options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: [NSFontAttributeName: UIFont.systemFontOfSize(16.0)], context: nil)
print("\(expectedLabelSize)")
return expectedLabelSize.size.height
}
Arriba está la función actual que uso para determinar la altura pero no funciona. Agradecería mucho cualquier ayuda que pueda obtener. Perfeccionaría la respuesta en Swift y no en el Objetivo C.

Respuestas:
Use una extensión en
StringSwift 3
y también en
NSAttributedString(que a veces es muy útil)Swift 4
Simplemente cambie el valor de
attributesen losextension Stringmétodosde
a
fuente
[NSFontAttributeName: font, NSLineBreakMode: .ByWordWrapping]pero no funcionóNSParagraphStyleAttributeName : styledonde el estilo es NSMutableParagraphStylesizeForItemAtIndexPathen unaUICollectionViewes que parece anular el retorno parainsetForSectionAtPara texto multilínea, esta respuesta no funciona correctamente. Puede crear una extensión de cadena diferente utilizando UILabel
El UILabel obtiene un ancho fijo y .numberOfLines se establece en 0. Al agregar el texto y llamar a .sizeToFit (), se ajusta automáticamente a la altura correcta.
El código está escrito en Swift 3 🔶🐦
fuente
sizeToFitHeres una solución simple que funciona para mí ... similar a algunos de los otros publicados, pero no incluye la necesidad de llamar
sizeToFitTenga en cuenta que esto está escrito en Swift 5
Esto maneja el ajuste de línea y tal. No es el código más elegante, pero hace el trabajo.
fuente
fuente
Esta es mi respuesta en Swift 4.1 y Xcode 9.4.1
Ahora llamas a esta función
fuente
Descubrí que la respuesta aceptada funcionaba para un ancho fijo, pero no para una altura fija. Para una altura fija, solo aumentaría el ancho para adaptarse a todo en una línea, a menos que haya un salto de línea en el texto.
La función de ancho llama a la función de altura varias veces, pero es un cálculo rápido y no noté problemas de rendimiento al usar la función en las filas de una UITable.
fuente
minimumTextWrapWidth:CGFloat?Verifique la altura del texto de la etiqueta y está trabajando en ello
fuente
Esta solución ayudará a calcular la altura y el ancho en tiempo de ejecución.
Aquí puede calcular la altura estimada que tomaría su cadena y pasarla al marco UILabel.
fuente
Swift 5:
Si tiene UILabel y de alguna manera, limitingRect no funciona para usted (me enfrenté a este problema. Siempre devolvió 1 altura de línea). Hay una extensión para calcular fácilmente el tamaño de la etiqueta.
Puedes usarlo así:
Funciona para mi
fuente
fuente