versiones guia español descargar actualizar iphone ios alignment uilabel

iphone - guia - qgis manual



¿Cómo alinear el texto de UILabel desde la parte inferior? (7)

Aquí hay dos maneras de hacer eso ...

1. Primero establezca numberOfLines en 0 y luego use la propiedad UILabel de UILabel para que su UILabel muestre con su contentSize .

yourLabel.numberOfLines = 0; [yourLabel sizeToFit];

Ver más información en este enlace: alinear verticalmente el texto dentro de una UILabel

2. Otra opción es tomar UITextField lugar de UILabel y establecer userInteractionEnabled en NO como abajo ...

[yourTextField setUserInteractionEnabled:NO];

y luego establezca la propiedad contentVerticalAlignment en la parte inferior como abajo ...

[yourTextField setContentVerticalAlignment:UIControlContentVerticalAlignmentBottom];

ACTUALIZAR

Además, con UITextField , no podemos lograr múltiples líneas. Entonces, en lugar de eso, podemos utilizar UITextView y establecer su userInteractionEnabled en NO . Luego, usa el código de abajo para alinearlo por la parte inferior.

CGFloat topCorrect = ([label bounds].size.height - [label contentSize].height); topCorrect = (topCorrect <0.0 ? 0.0 : topCorrect); label.contentOffset = (CGPoint){.x = 0, .y = -topCorrect};

Cómo se puede alinear la UILabel desde abajo. Digamos que mi etiqueta puede contener tres líneas de texto. Si el texto ingresado es una sola línea, entonces esta línea debe estar en la parte inferior de la etiqueta. Consulte la imagen de abajo para una mejor comprensión. El área naranja es el marco completo de la etiqueta. Actualmente tiene una línea y está alineada en el centro. Entonces, lo que quiero es que siempre se alinee el fondo, independientemente de cuántas líneas.

Por favor sugiera sus ideas.

Gracias.


Otra opción: usar una etiqueta para el color de fondo, la llamo una etiqueta original y otra para el texto, llamada etiqueta de texto en mi ejemplo. Luego calcula la altura y la coordenada Y para textLabel:

[textLabel sizeToFit]; int height = textLabel.frame.size.height; int yCoord = originalLabel.frame.origin.y + originalLabel.frame.size.height - height; textLabel.frame = CGRectMake( originalLabel.frame.origin.x, yCoord, textLabel.frame.size.width, height);


Puedes subclase UILabel y anulando el método:

- (void)drawTextInRect:(CGRect)rect

llame a super drawTextInRect con el rectángulo donde desee utilizar.


Solo establezco una restricción inferior a la vista superior en IB, que funciona para mí sin usar código y también el número de líneas para una restricción máxima.


Subclase UILabel

@interface Label : UILabel @end

Luego anula drawTextInRect como tal

@implementation Label - (void)drawTextInRect:(CGRect)rect { if(alignment == top) { rect.size.height = [self sizeThatFits:rect.size].height; } if(alignment == bottom) { CGFloat height = [self sizeThatFits:rect.size].height; rect.origin.y += rect.size.height - height; rect.size.height = height; } [super drawTextInRect:rect]; } @end


Tuve el mismo problema. Aquí es cómo hice para alinear el texto a la parte inferior de mi UILabel:

- (void)alignLabel:(UILabel *)l withText:(NSString *)text verticalAlignOption:(int)vertAlign{ CGSize stringSize = [text sizeWithFont:l.font constrainedToSize:l.frame.size lineBreakMode:l.lineBreakMode]; switch (vertAlign) { case 0: // align = top l.frame = CGRectMake(l.frame.origin.x, l.frame.origin.y, l.frame.size.width, stringSize.height ); break; case 1: // align = bottom l.frame = CGRectMake(l.frame.origin.x, (l.frame.origin.y + l.frame.size.height) - stringSize.height, l.frame.size.width, stringSize.height ); break; case 2: // align = middle // default break; } l.text = text; }

Ah, simplemente llama al método como este para alinearlo con el fondo:

[self alignLabel:self.mediaTitle withText:@"My text to align" verticalAlignOption:1];


Versión Swift 4.2 utilizando la propiedad contentMode para establecer la parte superior e inferior:

class VerticalAlignedLabel: UILabel { override func drawText(in rect: CGRect) { var newRect = rect switch contentMode { case .top: newRect.size.height = sizeThatFits(rect.size).height case .bottom: let height = sizeThatFits(rect.size).height newRect.origin.y += rect.size.height - height newRect.size.height = height default: () } super.drawText(in: newRect) } }

A continuación, configure su etiqueta de esa manera:

let label: VerticalAlignedLabel = UILabel() label.contentMode = .bottom