He agregado una etiqueta en mi archivo de plumilla, entonces es necesario que tenga una alineación superior izquierda para esa etiqueta. Como estoy proporcionando texto en tiempo de ejecución, no estoy seguro de cuántas líneas hay. Entonces, si el texto contiene solo una línea, entonces aparece alineado verticalmente en el centro. Esa alineación no coincide con mi etiqueta respectiva frente a ella.
Por ejemplo:
Que se ve extraño :(
¿Hay alguna forma en la que pueda establecer el texto de la etiqueta adecuado para la alineación superior izquierda?
Respuestas:
En lugar de volver a explicar, lo vincularé a esta pregunta / respuesta bastante extensa y altamente calificada:
Alinear verticalmente el texto hacia la parte superior dentro de un UILabel
La respuesta corta es no, Apple no lo hizo fácil, pero es posible cambiando el tamaño del marco.
fuente
Es bastante fácil de hacer. Cree un
UILabel
subcasco con unaverticalAlignment
propiedad y anuletextRectForBounds:limitedToNumberOfLines
para devolver los límites correctos para una alineación vertical superior, media o inferior. Aquí está el código:SOLabel.h
SOLabel.m
fuente
bounds.size.width
lugar derect.size.width
entextRectForBounds:limitedToNumberOfLines:
parece solucionarlo.Encontré una solución usando AutoLayout en StoryBoard.
1) Establezca el número de líneas en 0 y la alineación del texto en la izquierda.
2) Establecer restricción de altura.
3) La restricción de altura debe estar en relación: menor o igual que
4)
Obtuve el resultado de la siguiente manera:
fuente
viewWillLayoutSubviews
en el controlador o en el archivo de celda? Si es el controlador, ¿cómo accede a la UILabel desde la celda?El SOLabel funciona para mí.
Swift 3 y 5:
Esta versión se ha actualizado desde el original para permitir la compatibilidad con los idiomas RTL:
Rápido 1:
fuente
En mi caso, fue un
bottom space
problema de restricción. Lo había puesto en= 16
.Cuando lo configuré
bottom to >= 16
, este problema se resolvió.Además, si tiene alguna restricción de altura en la etiqueta, debe eliminarla.
Aquí está la vista de restricción de mi etiqueta en el inspector de tamaño:
fuente
En tu código
Tenga en cuenta que si lo usa en celdas de tabla u otras vistas que se reciclan con datos diferentes, deberá almacenar el marco original en algún lugar y restablecerlo antes de llamar a sizeToFit.
fuente
Encontré otra solución para el mismo problema. Usé en
UITextView
lugar deUILabel
y cambié laeditable()
función afalse
.fuente
También estaba teniendo este problema, pero lo que encontré fue que el orden en el que estableces las propiedades y métodos de UILabel es importante.
Si llama
[label sizeToFit]
anteslabel.font = [UIFont fontWithName:@"Helvetica" size:14];
, el texto no se alinea con la parte superior, pero si lo intercambia, ¡lo hace!También noté que establecer el texto primero también marca la diferencia.
Espero que esto ayude.
fuente
Mientras utiliza el generador de interfaces, establezca las restricciones para su etiqueta (asegúrese de establecer también la altura y el ancho). Luego, en el Inspector de tamaño, verifique la altura de la etiqueta. Allí querrá que lea> = en lugar de =. Luego, en la implementación para ese controlador de vista, establezca el número de líneas en 0 (también se puede hacer en IB) y establezca la etiqueta [label sizeToFit]; ya medida que su texto gane longitud, la etiqueta crecerá en altura y mantendrá su texto en la parte superior izquierda.
fuente
Si lo que necesita es texto no editable que, de forma predeterminada, comienza en la esquina superior izquierda, simplemente puede usar una Vista de texto en lugar de una etiqueta y luego establecer su estado en no editable, así:
Mucho más fácil que jugar con las etiquetas ...
¡Salud!
fuente
La solución con SoLabel funciona, gracias.
A continuación, he agregado la versión monotouch:
fuente
La forma más sencilla y sencilla es incrustar Label en StackView y configurar el eje de StackView en Horizontal, Alignment to Top en Attribute Inspector desde Storyboard como se muestra aquí .
fuente
Sobre la base de la increíble respuesta de totiG, he creado una clase IBDesignable que hace que sea extremadamente fácil personalizar la alineación vertical de un UILabel directamente desde el StoryBoard. Solo asegúrese de configurar la clase de UILabel en 'VerticalAlignLabel' desde el inspector de identidad de StoryBoard. Si la alineación vertical no surte efecto, vaya a Editor-> Actualizar todas las vistas, que debería funcionar.
Cómo funciona: una vez que haya configurado correctamente la clase de UILabel, el guión gráfico debería mostrarle un campo de entrada que toma un número entero (código de alineación).
Actualización: he agregado soporte para etiquetas centradas ~ Sev
Ingrese 0 para la alineación superior
Ingrese 1 para alineación media
Ingrese 2 para alineación inferior
fuente
también puede cambiar su UILabel a UITextView, porque básicamente hacen lo mismo, excepto que la ventaja de UITextView es que el texto se alinea automáticamente en la parte superior izquierda
fuente
Tengo este problema, pero mi etiqueta estaba en UITableViewCell, y en el fondo, la forma más fácil de resolver el problema era crear una UIView vacía y establecer la etiqueta dentro de ella con restricciones en la parte superior y solo en el lado izquierdo, en la maldición establecer el número de líneas en 0
fuente
Para iOS 7 eso es lo que hice y trabajé para mí
fuente
Swift 2.0: Uso de la extensión UILabel
Cree valores de enumeración constantes en un archivo Swift vacío.
Usando la extensión UILabel:
Cree una clase Swift vacía y asígnele un nombre. Agregue lo siguiente.
Uso:
fuente
sampleLabel: UILabel?
?Swift 3 versión de la respuesta de @ totiG
fuente
La respuesta de @ totiG es correcta y resolvió mi problema. Pero encontré un problema al implementar este método, en dispositivos más pequeños como 5s, SE, esto no funciona para mí. Tengo que ponerme
label.sizeToFit()
enoverride func layoutSubViews()
fuente
Rápido 5
Es simple, el orden de las propiedades lo es todo.
fuente
¿Cómo configurar la alineación superior izquierda para la aplicación UILabel para iOS? La etiqueta Establecer modo de contenido en "Arriba a la izquierda" funciona para mí, muchas gracias:
fuente