Tengo algunas etiquetas que quiero ajustar su altura al texto, este es el código que escribí para esto ahora
func heightForView(text:String, font:UIFont, width:CGFloat) -> CGFloat{
let label:UILabel = UILabel(frame: CGRectMake(0, 0, width, CGFloat.max))
label.numberOfLines = 0
label.lineBreakMode = NSLineBreakMode.ByWordWrapping
label.font = font
label.text = text
label.sizeToFit()
return label.frame.height
}
EDITAR:
El problema no estaba en este código, por lo que mi solución está en la pregunta en sí. ¡Todavía podría ser útil para otros!
sizeWithFont
posible que @TheBurgerShot no esté disponible para Swift,String
pero está disponible enNSString
. Debería poder llamarlo así.Respuestas:
Acabo de poner esto en un patio de recreo y funciona para mí.
Actualizado para Swift 4.0
Swift 3:
fuente
UILabel
por talla; Si este método se utiliza en el interiorlayoutSubviews
con la tendencia a ser invocado varias veces por diseño completo, la creación de objetos adicionales puede introducir retrasos notables, especialmente durante el desplazamiento.Si está utilizando AutoLayout , puede ajustar la
UILabel
altura solo mediante la interfaz de usuario de configuración.Para iOS8 o superior
UILabel
UILabel
1 a 0Para iOS7
UILabel
Equal
aGreater than or Equal
UILabel
1 a 0Su
UILabel
aumentará automáticamente dependiendo de la altura del textofuente
Creo esta extensión si quieres
fuente
Tengo una fuerte solución de trabajo.
en diseño
en establecedor de texto:
UPD. por supuesto con esta configuración de UILabel:
fuente
Solo configurando:
La etiqueta ajusta automáticamente su altura según la cantidad de texto ingresado.
fuente
basado en la respuesta de Anorak, también estoy de acuerdo con la preocupación de Zorayr, así que agregué un par de líneas para eliminar el UILabel y devolver solo el CGFloat, no sé si ayuda ya que el código original no agrega el UIabel, pero no arroja error, así que estoy usando el siguiente código:
fuente
En swift 4.1 y Xcode 9.4.1
Solo 3 pasos
Paso 1)
Paso 2)
Paso 3)
fuente
La solución sugerida por Anorak como una propiedad calculada en una extensión para UILabel:
Uso:
fuente
Siguiendo la respuesta de @Anorak, agregué esta extensión a String y envié un recuadro como parámetro, porque muchas veces necesitará un relleno en su texto. De todos modos, quizás a algunos les resulte útil.
fuente
A continuación se explica cómo calcular la altura del texto en Swift. Luego puede obtener la altura del rect y establecer la altura de restricción de la etiqueta o textView, etc.
fuente
simplemente llame a este método donde necesita una altura dinámica para la etiqueta
fuente
Swift 4.0
self.messageLabel = UILabel (marco: CGRect (x: 70, y: 60, ancho: UIScreen.main.bounds.width - 80, alto: 30)
Este enlace describe la forma del guión gráfico de hacer lo mismo
fuente
Swift 4.0
En lugar de calcular la altura del texto / etiqueta, simplemente cambio el tamaño de la etiqueta después de insertar el texto (dinámico).
Suponiendo que myLabel es el UILabel en cuestión:
Y ahora viene la parte divertida:
fuente
El método de extensión Swift 4.1 para calcular la altura de la etiqueta:
fuente
Swift 5, XCode 11 forma de guión gráfico. Creo que esto funciona para iOS 9 y versiones posteriores. Si desea, por ejemplo, la etiqueta "Descripción" para obtener la altura dinámica, siga los pasos:
1) Seleccione la etiqueta de descripción -> Ir al Inspector de atributos (icono de lápiz), establezca: Líneas: 0 Salto de línea: Ajuste de palabras
2) Seleccione su UILabel del guión gráfico y vaya al Inspector de tamaño (icono de regla), 3) Vaya a "Prioridad de resistencia a la compresión de contenido a 1 para todos los demás componentes de UIView (etiquetas, botones, vista de imágenes, etc.) que interactúan con su etiqueta.
Por ejemplo, tengo UIImageView, Etiqueta de título y Etiqueta de descripción verticalmente en mi vista. Establecí la Prioridad de resistencia a la compresión de contenido en UIImageView y la etiqueta del título en 1 y la etiqueta de descripción en 750. Esto hará que una etiqueta de descripción tome la altura necesaria.
fuente
Para hacer que la etiqueta sea dinámica en Swift, no proporcione una constancia de altura y, en el guión gráfico, haga que el número de líneas de la etiqueta 0 también dé una restricción inferior y esta es la mejor manera de manejar la etiqueta dinámica según el tamaño de su contenido.
fuente
También puede utilizar la
sizeThatFits
función.Por ejemplo:
label.sizeThatFits(superView.frame.size).height
fuente